2015-02-05 93 views
0

我是AngularJS的新手,在使用控制器中的$scope.$broadcast('update:button:label', {label: 'Edited'})時遇到了問題。本次活動是由一個指令buttonStatus聽了:

$scope.$on('update:button:label', function(event, data) { 
    $scope.buttonlabel = data.label; 
}); 

buttonlabel變量已經更新,但變化不是由buttonStatus使用的模板中。爲什麼這樣?

回答

0

$scope.$broadcast向下調度一個事件給所有的子範圍(和他們的孩子)通知註冊的聽衆。所以如果指令不在控制器的作用域內,它的$ scope將永遠不會收到任何事件。

這裏一個簡單的解決方案是使用$rootScope.$broadcast$rootScope.$on來處理消息。

+0

正在偵聽動作並更新範圍變量。只是在模板中它沒有改變。 – rkshakya99

+0

你可以提供一個演示應用程序託管在jsfiddler或plnkr更好的調試? – Rebornix

0

可能您正在您的指令中創建一個新的作用域。在這種情況下,子範圍的任何更改都不會反映在原始數據類型更改的父範圍中。嘗試使用範圍變量(如$scope.someObj.buttonlabel)。如果可以爲該問題創建一個重定位器,則該範圍變得更清晰。 請參閱此處angular directive scope inheritance rules.