我尝试使用AngularJS显示对象属性及其值的列表。一些属性名称以' $'开头。字符。这些属性名称不会显示。我非常希望避免编辑源数据,因此Angular很高兴。这是一个展示问题的小例子:
<p data-ng-repeat="(key, value) in {'$no': 'rock', 'yes': 'hard place'}">
{{ key }}: {{ value }}
</p>
以上代码仅显示第二项。
奇怪的是,如果您知道属性名称,则可以强制Angular显示这些属性:
{{ my_object.$no }}
我对Angular有点新鲜,是否有过滤器或其他我缺少的东西才能显示这些属性?
注意:我使用的是最新的AngularJS版本1.2.14。
我在Github上向角度开发团队提交了一个问题:
https://github.com/angular/angular.js/issues/6520
那里并没有真正的任何新信息,它已被关闭,因为&#34;按预期工作&#34; :(
所以,下面@Gruff Bunny的回答可能是目前最好的答案。
答案 0 :(得分:2)
Angular使用$作为其自身属性的前缀,因此ngRepeat指令忽略以$开头的对象的属性。
这是以角度迭代对象的代码:
collectionKeys = [];
for (key in collection) {
if (collection.hasOwnProperty(key) && key.charAt(0) != '$') {
collectionKeys.push(key);
}
}
一种解决方法是将对象转换为数组并在UI中使用它:
angular.forEach( $scope.obj, function(value, key){
$scope.arr.push( { key: key, value: value } );
});
<p data-ng-repeat="obj in arr">{{ obj.key }}: {{ obj.value }}</p>
答案 1 :(得分:0)
在ng-repeat指令中忽略以“$”符号为前缀的键值:
$scope.$watchCollection(rhs, function ngRepeatAction(collection){
........
collectionKeys = [];
for (key in collection) {
if (collection.hasOwnProperty(key) && key.charAt(0) != '$') {
collectionKeys.push(key);
}
}
........
});
Angular.js LineNumber:19598