Angularjs 嵌套指令范围
Angularjs nested directives scopes
请参考Plunker。
问题:当我在主控制器中使用 item-over 指令时,它会触发良好的 OnOver。这工作正常:
<a href="#" ng-repeat="item in main.Data" item-over="main.OnOver(item)">{{item.Name}}</a>
但是当我把它放在列表视图指令中时,它不会触发控制器的 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 -
<list-view items-source="main.Data">
现在您在指令范围内有了这些值,您可以使用它们了。
或者因为您正在继承父作用域,所以您可以使用 $parent 直接访问该值 - 在您的指令中:
link: function (scope, element) {
scope.itemsSource = scope.$parent.itemsSource
}
在检查 plunkr 时还有一些问题,请检查你的 plunkr 的这个工作示例 - working plunkr
请参考Plunker。 问题:当我在主控制器中使用 item-over 指令时,它会触发良好的 OnOver。这工作正常:
<a href="#" ng-repeat="item in main.Data" item-over="main.OnOver(item)">{{item.Name}}</a>
但是当我把它放在列表视图指令中时,它不会触发控制器的 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 -
<list-view items-source="main.Data">
现在您在指令范围内有了这些值,您可以使用它们了。
或者因为您正在继承父作用域,所以您可以使用 $parent 直接访问该值 - 在您的指令中:
link: function (scope, element) {
scope.itemsSource = scope.$parent.itemsSource
}
在检查 plunkr 时还有一些问题,请检查你的 plunkr 的这个工作示例 - working plunkr