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