我是AngularJS的新手,当我从控制器使用$scope.$broadcast('update:button:label', {label: 'Edited'})
时遇到了问题。指令buttonStatus
:
$scope.$on('update:button:label', function(event, data) {
$scope.buttonlabel = data.label;
});
buttonlabel
变量已更新,但更改未显示在buttonStatus
使用的模板中。为什么会这样?
答案 0 :(得分:0)
$scope.$broadcast
向下发送一个事件给所有子范围(及其子女)通知已注册的听众。因此,如果指令不在控制器的范围内,则其$ scope将永远不会收到任何事件。
这里的一个简单解决方案是使用$rootScope.$broadcast
和$rootScope.$on
来处理邮件。
答案 1 :(得分:0)
您可能正在指令中创建新范围。在这种情况下,子范围的任何更改都不会反映在原始数据类型更改的父范围中。尝试使用范围变量,如$scope.someObj.buttonlabel
。如果您可以为问题创建一个plunker,它将成为清晰。
请参阅此处查看angular directive scope inheritance rules.