Проверьте размер объекта в шаблоне AngularJS, не так ли?
Я хочу выполнить итерацию через myObject
в шаблоне AngularJS
Это не работает:
<ul ng-if="Object.keys(myObject).length">
<li ng-repeat="(key, val) in myObject">
Value at key {{ key }} is: {{ val }}
</li>
</ul>
Ничего не видно, я подозреваю, потому что $scope.Object
не определен.
Вместо этого я сделал это:
В контроллере/директиве:
$scope.sizeOf = function(obj) {
return Object.keys(obj).length;
};
В шаблоне:
<ul ng-if="sizeOf(myObject)">
<li ng-repeat="(key, val) in myObject">
Value at key {{ key }} is: {{ val }}
</li>
</ul>
Мне не нравится это решение из-за дублирования этой функции в каждом отдельном контроллере или директиве $scope
.
Вы видите какое-нибудь более чистое решение?
Спасибо!
Ответы
Ответ 1
Вы можете использовать директиву Object
в ngIf
везде. Просто поставьте ссылку на область корня:
app.run(function($rootScope) {
$rootScope.Object = Object;
});
Он также будет доступен в изолированных областях, например, в директивах.
UPD. В последней версии Angular вы больше не можете ссылаться на Object
в выражениях. В этом случае вам понадобятся индивидуальные ссылки:
app.run(function($rootScope) {
$rootScope.keys = Object.keys;
});
а затем используйте эту функцию:
ng-if="keys(myObject).length"
Ответ 2
В вашем контроллере добавьте эту строку
$scope.Object = Object;
Затем вы должны иметь возможность использовать Object.XXX в своем шаблоне, как то, что вы сделали.
Ответ 3
Неужели этого недостаточно?
<ul ng-if="myObject">
<li ng-repeat="(key, val) in myObject">
Value at key {{ key }} is: {{ val }}
</li>
</ul>
Директива заботится о null, undefined, пустых объектах. Plunkr для демонстрации. Попробуйте изменить объект на undefined, null или заполнить значением.