角度范围变量未在$ broadcast上更新

时间:2015-02-05 07:53:51

标签: angularjs

我是AngularJS的新手,当我从控制器使用$scope.$broadcast('update:button:label', {label: 'Edited'})时遇到了问题。指令buttonStatus

正在监听此事件
$scope.$on('update:button:label', function(event, data) {
   $scope.buttonlabel = data.label;
});

buttonlabel变量已更新,但更改未显示在buttonStatus使用的模板中。为什么会这样?

2 个答案:

答案 0 :(得分:0)

$scope.$broadcast向下发送一个事件给所有子范围(及其子女)通知已注册的听众。因此,如果指令不在控制器的范围内,则其$ scope将永远不会收到任何事件。

这里的一个简单解决方案是使用$rootScope.$broadcast$rootScope.$on来处理邮件。

答案 1 :(得分:0)

您可能正在指令中创建新范围。在这种情况下,子范围的任何更改都不会反映在原始数据类型更改的父范围中。尝试使用范围变量,如$scope.someObj.buttonlabel。如果您可以为问题创建一个plunker,它将成为清晰。 请参阅此处查看angular directive scope inheritance rules.