2015-02-05 51 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.