7

尝试从角度表达式中读取 mongo _id 字段时:

<tr ng-repeat="person in people">
  <td>{{person._id}}</td>
  <td>{{person.name}}</td>
  <td>{{person.location}}</td>
  <td>{{person.active}}</td>
</tr>

抛出以下错误:

"Referencing private fields in Angular expressions is disallowed"

plunker 链接:http ://plnkr.co/edit/dgHNP2rVGPwAltXWklL5

编辑:

此更改已在 Angular 1.2.1 中恢复:https ://github.com/angular/angular.js/commit/4ab16aaaf762e9038803da1f967ac8cb6650727d

4

1 回答 1

6

当前的解决方案

这是由于 Angular 1.2.0 的重大变化(在此讨论:https ://github.com/angular/angular.js/commit/3d6a89e )

有一个简单的,如果不是烦人的,解决这个问题。

在您的app.run函数中,您可以添加一个 $rootScope 级别的访问器对象,该对象包含一个返回正确 Mongo ID 的函数。

app.run(function($rootScope) {
  $rootScope.accessors = {
    getId: function(row) {
      return row._id
    }
  }
});

然后,在您的标记中,使用该方法而不是直接访问数据点:

<tr ng-repeat="person in people">
  <td>{{accessors.getId(person)}}</td>
  <td>{{person.name}}</td>
  <td>{{person.location}}</td>
  <td>{{person.active}}</td>
</tr>

有修复的 plunker:http: //plnkr.co/edit/NcRrKh

讨论:

这将使您能够继续进行开发,但要知道与直接访问变量相比,它确实会带来更多的开销。对于小型项目,这不应该在任何可察觉的水平上影响性能,尽管您可能会在较大的应用程序上看到一些可测量的量。然而,到目前为止,这种担忧纯粹是学术性的。

于 2013-11-14T16:54:57.077 回答