1

我有一项服务可以使

$rootScope.$broadcast('myEvent', somedata)

时。在控制器中我做

$scope.$on('myEvent', function (evt, somedata) { $scope.data = somedata })

问题是如果我省略

if (!$scope.$$phase) { $scope.$apply(); }

在控制器的事件监听器中,视图不会改变。这是为什么?有没有更好的方法来做到这一点?

4

1 回答 1

0

这是因为 $apply 是一个懒惰的工作者,只有在有足够的东西可以刷新时才会完成这项工作。您无法控制何时,除非您明确调用 $scope.$apply。

是的,有一个更好的方法来做到这一点:调用 safeApply。因为显式调用 many $apply 会导致冲突。没有官方的 safeApply 实现,所以可以选择你的毒:

于 2013-08-30T09:41:45.423 回答