Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angularjs嵌套指令作用域_Angularjs_Angularjs Directive_Angularjs Scope - Fatal编程技术网

Angularjs嵌套指令作用域

Angularjs嵌套指令作用域,angularjs,angularjs-directive,angularjs-scope,Angularjs,Angularjs Directive,Angularjs Scope,请参阅。 问题是:当我在主控制器中使用item over指令时,它会触发fine OnOver。这很好用: <a href="#" ng-repeat="item in main.Data" item-over="main.OnOver(item)">{{item.Name}}</a> 但是当我把它放在list-view指令中时,它不会触发控制器的OnOver方法。这不起作用: <list-view itemssource="main.Data">

请参阅。 问题是:当我在主控制器中使用item over指令时,它会触发fine OnOver。这很好用:

    <a href="#" ng-repeat="item in main.Data" item-over="main.OnOver(item)">{{item.Name}}</a>

但是当我把它放在list-view指令中时,它不会触发控制器的OnOver方法。这不起作用:

<list-view itemssource="main.Data">
  <a href="#" item-over="main.OnOver(item)">{{item.Name}}</a>
</list-view>


我做错了什么?

问题是listView指令正在创建独立的作用域,因此您无法访问此指令作用域内的main或item。即使onOver也无法访问,因为它属于父范围

如果您不特别需要在listview指令中为itemSource进行双向绑定,则通过在return语句中设置
scope:true
,使该指令继承父范围

在指令中使用attr访问attr值,而不创建隔离作用域-

return {
   link:function (scope, element, attrs) {
       scope.itemsSource = attrs.itemsSource
   }
}
您将以相同的方式传递itemsSource-

现在您的指令范围中有了这些值,您可以使用它们了

或者,由于您正在插入父范围,您可以在指令中使用$parent直接访问该值:

link: function (scope, element) {
    scope.itemsSource = scope.$parent.itemsSource
}

在检查plunkr时,还有一些问题,请检查plunkr的这个工作示例-

显示指令代码在Plunker中我不需要为itemssource设置双向绑定…但是如果我在listView指令中设置scope:true,那么我将如何在listView指令的链接函数中引用itemssource?然后我应该如何绑定到listView指令模板中的itemssource?我已经更新了答案,说明了如何在不创建隔离范围的情况下使用属性