两个指令使用真正的范围,一个是另一个的父,为什么?

时间:2013-11-12 06:47:48

标签: javascript angularjs angularjs-directive

这是Plunk http://plnkr.co/edit/MlsOkwcrrHc2fnvZrWPI?p=preview。 (请忽略测试和放大器指令,它们没用)

CLOSED

关闭此问题的原因:
我添加了更多日志并将变量添加到子范围,并发现第一个和第二个共享相同的子范围。因此,出现这个毫无意义的问题是我的错。
但是我找到了一件事:如果我在指令处使用scope.$emit()(此插件的第二个),使用相同作用域的另一个指令(首先在此插件处)将收到该事件而父母将按预期收到。如果使用scope.$parent.$emit(),则只有父级才会收到。

HTML

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

0 个答案:

没有答案