AngularJS - 以'$'作为第一个字符显示属性

时间:2014-03-02 21:50:22

标签: javascript angularjs

我尝试使用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的回答可能是目前最好的答案。

2 个答案:

答案 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>

Fiddle

答案 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