Angularjs嵌套指令作用域
请参阅。 问题是:当我在主控制器中使用item over指令时,它会触发fine OnOver。这很好用: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">
<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?我已经更新了答案,说明了如何在不创建隔离范围的情况下使用属性