阵列更新后Angularjs ng-repeat不会更新

时间:2014-07-16 12:29:04

标签: javascript angularjs

我不确定我在这里缺少什么,但我正在尝试更新数组中的值,然后将其反映在转发器中。在应用更新之前,我是否需要制作副本或其他内容才能让Angular显示更改?

---示例json

  "lists": [
       {
        "name": "one",
        "enabled": true
       },
       {
        "name": "two",
        "enabled": false
       }
    ]

! - 代码

setTimeout(function(){
    $scope.$apply(function(){
    $scope.lists[1].enabled = true;
});
},1);

!--- html

<span data-ng-repeat="list in lists | filter: {enabled: true}"></span>

3 个答案:

答案 0 :(得分:7)

您正在谈论的“其他控制器”广播事件:

 $rootScope.$broadcast('listChange', listArray);

然后在控制$ scope.lists值的控制器中,监听事件:

  $scope.$on('listChange', function(event, list) {

       $scope.$apply(function() {
           // Update goes here
         });

    });

答案 1 :(得分:1)

如果您使用内置超时功能$ timeout的角度可能会有所帮助。

$timeout(function(){
    $scope.lists[1].enabled = true;
},1);

此处的文档:https://docs.angularjs.org/api/ng/service/ $ timeout

答案 2 :(得分:0)

将list变量添加到控制器内的$ scope中,如下所示:

$scope.lists = [{
    "name": "one",
    "enabled": true
   },
   {
    "name": "two",
    "enabled": false
   }];

您还必须在&lt; span &gt;内添加内容,因为您发布的Html不会显示任何内容。 (您需要在&lt; span &gt;标记内执行某些操作才能显示内容)

<span ng-repeat="list in lists | filter:{enabled: true}">{{list.name}}</span>

现在,当您更新lists变量时,这将立即反映在Html中。 对我来说很好。希望我能帮忙!

相关问题