1

这是 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用于创建子范围”?有人可以解释这一点并在这里提供帮助吗?谢谢 :)

4

0 回答 0