我有一个服务,使
$rootScope.$broadcast('myEvent', somedata)
不时。在控制器我做
$scope.$on('myEvent', function (evt, somedata) { $scope.data = somedata })
的问题是,如果我省略
if (!$scope.$$phase) { $scope.$apply(); }
在控制器的事件监听器,然后查看不会改变。这是为什么?有没有更好的方法来做到这一点?
我有一个服务,使
$rootScope.$broadcast('myEvent', somedata)
不时。在控制器我做
$scope.$on('myEvent', function (evt, somedata) { $scope.data = somedata })
的问题是,如果我省略
if (!$scope.$$phase) { $scope.$apply(); }
在控制器的事件监听器,然后查看不会改变。这是为什么?有没有更好的方法来做到这一点?
这是因为$ apply是一个懒惰的工人,只会有足够的东西来刷新工作。你不能控制何时,除非你明确地调用$ scope。$ apply。
是的,有一个更好的方法来做到这一点:打电话safeApply。因为显式调用许多$ apply可能会导致冲突。有没有正式的safeApply实现,所以可以选择你的毒药:
是的,我明白这一点。我的问题是为什么当我更改消息范围时,我的视图不会更新。 '$ $范围上( '信息',功能(例如,数据){' '$ scope.someData =数据;' '//没有这个如果视图不会update' '如果( $ scope。$$ phase){' '$ scope。$ apply();' '}' '});' –
我的意思是,为什么每次遇到事件时都要调用'$ apply',那已经从'$ rootScope'广播过了? –
是的,它属于您必须调用$ apply的范围。不要随时拨打$申请,但如果发生这样的意外事件(来自Rootcope的事件就是其中之一),则无论如何您都必须打电话给它。 – bdavidxyz
您可以发布您的代码? – noj
从你的代码,你真的不需要申请。你能粘贴整个代码吗? – zsong
对不起,迟到了,这是我的代码:http://plnkr.co/edit/zr7asMrCZFEhufXhniy4?p=preview –