2016-10-23 93 views
0

如何使对象属性的绑定工作。例如,在我的控制,我有:对象属性中的角度绑定

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

在我看来:

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

现在,每当我改变审查变量在控制器中,没有更新:

$scope.reviews = [new updated reviews] 

可能是因为角正在监听$ scope.reviews的旧引用的更改。

有两种解决方案的结合工作,但两者都不是很聪明:

  1. 连接的项目,以直接的范围,所以这将是$scope.items = $scope.reviews.items,现在,只要项目被改变,他们将更新。
  2. 用户angular.copy保持目标引用,所以angular.copy({items: []}, $scope.reviews);

是否有任何其他的解决方案比上述要做到这一点其他的。

+0

它应该像#scope.reviews = []新更新的评论] ...问题应别在别的地方......并且可以创建一个演示文稿... –

+0

如果scope.reviews是一个数组,但它是一个对象,并且该数组是对象键之一,即$ scope.reviews = {rating_summary:5,items:[item1,item2,..]} –

+0

查看我的示例:https://jsfiddle.net/or66quta/ –

回答

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'} ] 
    }; 
+0

它实际上工作,我有代码的其他部分的问题,对不起 –