这是Plunk http://plnkr.co/edit/MlsOkwcrrHc2fnvZrWPI?p=preview。 (请忽略测试和放大器指令,它们没用)
关闭此问题的原因:
我添加了更多日志并将变量添加到子范围,并发现第一个和第二个共享相同的子范围。因此,出现这个毫无意义的问题是我的错。
但是我找到了一件事:如果我在指令处使用scope.$emit()
(此插件的第二个),使用相同作用域的另一个指令(首先在此插件处)将收到该事件而父母将按预期收到。如果使用scope.$parent.$emit()
,则只有父级才会收到。
<div first second></div>
我从第二个指令发出second-directive
事件:
link: function(scope,ele,attrs) { console.log('second directive --------------\n'); console.log(scope); // log scope of second directive here scope.$emit('second-directive', 'from second'); }
从第一个指令和主控制器中捕获事件:
$scope.$on('second-directive',function(event,args){ console.log('get event at main -------------\n'); console.log(event); console.log(args); });首先是
$scope.$on('second-directive',function(event,args){ console.log('get event at first directive -------------\n'); console.log(event); console.log(args); });
您可以在控制台上看到日志消息,并找到:
第二个指令的范围有父(第一个指令)和祖父母(主)。像这样的家谱:
main |- first |-second
但是我使用第一个指令和第二个指令同时使用scope: true
,所以他们应该创建main的新子范围。家谱应该是这样的:
main |- first |- second
我是否误解“scope:true
用于创建子范围”?
有人可以解释这个并在这里帮忙吗?谢谢:))