我创建了2个指令:Parent和Child。试图让他们互相交谈。看起来如果他们都有范围他们没有收到事件。根据{{1}}声明$emit
当然,应该通过范围冒泡?
答案 0 :(得分:6)
Isolate scope is now available only to the isolate directive that requested it and its template
。
这是一个吸虫:http://plnkr.co/edit/EfKJthkQLitWnF2srykM?p=preview
您可以将子指令创建为父指令的模板,因为模板指令确实获得了如上所述的指令范围。
.directive('parent', function ($timeout) {
return {
template:'<child name="Jimmy"></child>',
另一个解决方案是在父指令上创建一个控制器,并在子指令中要求它。
.directive('parent', function ($timeout) {
return {
controller: function(){
this.hungry = function(message){
// something
}
}
儿童指令:
.directive('child', function ($timeout) {
return {
require: "^parent",
link: function (scope, element, attrs, parentCtrl) {
parentCtrl.hungry("I'm hungry!")
答案 1 :(得分:1)
在您的示例中,两个指令都具有来自同一父作用域的隔离范围,因此它们没有父/子关系。
为了让它按预期运作,您可以指定scope: true
而不是scope: {...}
。在这种情况下,child指令的范围将是父指令范围的子范围。