在$ broadcast之后的$ scope on $事件后,角度范围未更新

时间:2016-04-12 06:39:00

标签: javascript angularjs scope

在我的控制器中,我设置了一个名为scope的{​​{1}}变量,如下所示:

diffData

在我看来,我这样绑定$scope.diffData = $scope.diffSync.data; 的num属性:

diffData

当我收到<div class="sync-data"> num = {{diffData.num ? diffData.num : 0}}<div> 事件$broadcast时,我将旧的new synced data替换为具有更新数量的新数据,如下所示:

diffData

问题是新的$scope.$on('new synced data', function(event, data) { console.log('new synced data event', data); $scope.diffData = data; }); 未在视图中更新。我该如何解决这个问题?

2 个答案:

答案 0 :(得分:1)

您是否尝试过$scope.$apply。使用$ scope。$ apply更改范围变量。

$scope.$on('new synced data', function(event, data) {
    console.log('new synced data event', data);
    $scope.$apply(function(){
        $scope.diffData = data;
    });
});

答案 1 :(得分:1)

通常,当Angular中未应用更改时,您可以调用

$scope.$apply(function() {
    // change vars here
})

虽然我更喜欢较短的解决方案:

// change vars
$scope.foo = 'bar';
$scope.$applyAsync();

这允许Angular在可能的情况下应用更改,并且不会与对$apply()的其他调用冲突