不能在将指令作用域设置为false的指令负面影响中从孤立作用域广播
Can't broadcast from isolated scope in directive—negative implications of setting directive scope to false?
我有一种情况,我想从指令的链接函数内$broadcast
-其中该指令具有孤立的作用域。不幸的是,由于指令scope
不是典型地继承自父指令$scope
,因此不可能在孤立的作用域中广播,-参考。
我知道在我的指令上使用scope: false
将导致指令使用它的父范围,潜在地拥挤父范围,并导致可能的命名冲突等,使指令在可重用性方面不太可靠。
所以,也许我可以小心地拥挤父作用域。是否有其他原因,为什么我可能不想使用scope: false
的指令,打算被重用?-这仅仅是一个喜好和"整洁"的事情,还是有其他的负面影响?
据我所知,除了让指令改变一个服务(这在我的情况下是不可能的,因为父作用域层次结构)之外,没有其他选择来获得从指令的链接函数内部广播实现的功能,所以据我所知,使用$broadcast
是唯一的方法。如有任何指导,欢迎。
谢谢!
编辑:要清楚,我的意图是从隔离作用域内部广播,向下到父作用域的子,即JS
.controller('parent', function ($scope) {
$scope.parent = 'parentProperty';
})
.directive('isolate', function() {
return {
scope: {},
template: '<div ng-click="click()">Click</div>',
link: function (scope) {
scope.click = function () {
console.log('clicked,but no broadcast');
scope.$broadcast('event', 'string');
}
}
};
})
.directive('child', function () {
return {
link: function(scope) {
scope.$on('event', function (e, event) {
console.log(event);
});
}
};
});
HTML <body ng-controller="parent">
<div isolate>Click me to broadcast
</div>
<div child>
</div>
</body>
PLNKR: http://plnkr.co/edit/wKDOP4UpdgDFrHvzY0UN?p=preview
我想你误解了你链接的文章。可以广播事件以隔离作用域。甚至在你的文章中提到:
技巧是要记住,在AngularJS中,可以看到,隔离作用域能够监听通过作用域层次结构向下广播的事件;但是,它无法在其父作用域中看到相关的作用域值"pingCount"。
$broadcast
发送事件到父/子作用域层次结构(包括隔离作用域)。您可以使用$emit
将事件发送到层次结构。
听起来你想在指令的链接函数中使用$emit
,这样事件就会转到父范围。来自文档的解释
编辑
好,这里有一个使用两个事件的简单方法。该指令首先使用$emit()
向父作用域发送一个事件。父作用域使用$on()
来等待此事件。当它发生时,它使用$broadcast()
向所有子作用域发送另一个事件。
Plunkr
这是原始的,很可能会崩溃。相反,你可以考虑使用指令的require
属性,并使用带有子指令用于通信的API的控制器。
- 如何将多槽transclude作用域设置为指令作用域
- 指令作用域始终为空
- 如何在angularjs中访问一个指令作用域值到另一个指令
- AngularJS指令作用域未解析(“属性名称未定义”错误)
- 角度指令作用域绑定在 ng-repeat中不起作用
- 指令 作用域更改时无法触发
- 角度JS指令作用域变量关系
- 如何使用用@定义的指令作用域生成ng-if
- 使用指令作用域变量呈现的动态模板
- 在指令作用域和控制器$scope之间共享数据
- 在没有自己的控制器的情况下使用指令作用域何时合适
- 是否可以链接指令作用域(例如obj.prop)
- 与控制器在同一元素中的自定义指令作用域
- 将指令作用域值绑定到HTML
- AngularJS-获取一个输入值并将其传递给父指令作用域
- 正在与子指令作用域共享作用域对象
- angularjs中没有更新指令作用域变量
- 如何从控制器调用指令作用域上的函数
- 从控制器外部访问指令作用域
- 异步上未更新指令作用域