我不确定我在这里缺少什么,但我正在尝试更新数组中的值,然后将其反映在转发器中。在应用更新之前,我是否需要制作副本或其他内容才能让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>
答案 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中。 对我来说很好。希望我能帮忙!