2013-08-30 51 views
1

我有一個服務,使

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

不時。在控制器我做

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

的問題是,如果我省略

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

在控制器的事件監聽器,然後查看不會改變。這是爲什麼?有沒有更好的方法來做到這一點?

+0

您可以發佈您的代碼? – noj

+0

從你的代碼,你真的不需要申請。你能粘貼整個代碼嗎? – zsong

+0

對不起,遲到了,這是我的代碼:http://plnkr.co/edit/zr7asMrCZFEhufXhniy4?p=preview –

回答

0

這是因爲$ apply是一個懶惰的工人,只會有足夠的東西來刷新工作。你不能控制何時,除非你明確地調用$ scope。$ apply。

是的,有一個更好的方法來做到這一點:打電話safeApply。因爲顯式調用許多$ apply可能會導致衝突。有沒有正式的safeApply實現,所以可以選擇你的毒藥:

+0

是的,我明白這一點。我的問題是爲什麼當我更改消息範圍時,我的視圖不會更新。 '$ $範圍上( '信息',功能(例如,數據){' '$ scope.someData =數據;' '//沒有這個如果視圖不會update' '如果( $ scope。$$ phase){' '$ scope。$ apply();' '}' '});' –

+0

我的意思是,爲什麼每次遇到事件時都要調用'$ apply',那已經從'$ rootScope'廣播過了? –

+0

是的,它屬於您必須調用$ apply的範圍。不要隨時撥打$申請,但如果發生這樣的意外事件(來自Rootcope的事件就是其中之一),則無論如何您都必須打電話給它。 – bdavidxyz

相關問題