对象属性中的角度绑定

时间:2016-10-23 05:50:08

标签: angularjs angularjs-scope

如何使绑定适用于对象属性。例如,在我的控制器中,我有:

$scope.reviews = {
  rating_summary: 4,
  items: [ { title: 'A Title'}, etc...  ]
}

在我看来:

<li ng-repeat="review in reviews.items">

现在,每当我更改控制器中的评论变量时,都不会更新任何内容:

$scope.reviews = [new updated reviews]

可能因为angular正在侦听$ scope.reviews旧引用的更改。

绑定工作有两种解决方案,但两者都不是很聪明:

  1. 直接将项目附加到范围,因此它将是$scope.items = $scope.reviews.items,现在只要项目发生更改,它们就会更新。
  2. 用户angular.copy保留目标引用,因此angular.copy({items: []}, $scope.reviews);
  3. 除了上述内容之外,还有其他任何解决方案可以实现此目的。

1 个答案:

答案 0 :(得分:1)

在更新对象/项目时必须有一些错误 请参阅此Plunker

$scope.reviews = {
    rating_summary: 4,
    items: [ { title: 'A Title'}, { title: 'B Title'}  ]
  };

  $scope.changeItems = function(){
    $scope.reviews.items = [ { title: 'A Title'}, { title: 'B Title'},
                             { title: 'C Title'}];
  };

  $scope.changeObject = function(){
    $scope.reviews = {
    rating_summary: 4,
    items: [ { title: 'A Title'}, { title: 'B Title'}, { title: 'D Title'}  ]
  };