【发布时间】:2014-02-10 16:52:01
【问题描述】:
我想知道如何在模板元素的 ng-click 事件上调用驻留在控制器中的函数。我必须在许多页面中使用此指令。因此我需要在各个控制器页面中处理单击事件。下面的代码调用驻留在指令中的单击函数(moreitemdetails)。我尝试将范围设置为 moreitemdetails: '=' 。它也不起作用。
我一直在使用指令
app.directive('groceryList', function){
return {
restrict: 'E',
scope: {
array: '=',
listItemClick:'&',
moreitemdetails: '&',
},
templateUrl: 'list.html',
link: function(scope, element, attrs) {
scope.label = attrs.label;
scope.listItemClick=function(e){
$(e.currentTarget).find('.next-items').slideToggle('fast');
}
scope.moreitemdetails=function(name,type){
//other code
}
}
};
});
指令的调用是
<grocery-list array="items"></grocery-list>
这是模板文件
<div ng-click="listItemClick($event)">
<div>
<div class="item">
<span class="item-details">
{{array[0].Item}}
</span>
<span class="down-arrow"></span>
</div>
<div class="next-items">
<ul>
<li class="item" ng-repeat="list in array">
<div class="item-details" ng-click="moreitemdetails(list.Name,list.Type)">{{list.Item}}</div>
</li>
</ul>
</div>
有办法绕过去吗?
我也想知道 $location 在另一个指令中的用法。引用前面的例子(除了 moreitemdetails() 中的指令定义和操作外,其他一切都相同)
app.ui.directive('groceryList', ['$location', function(location){
return {
restrict: 'E',
scope: {
array: '=',
listItemClick:'&',
moreitemdetails: '&',
},
templateUrl: 'list.html',
link: function(scope, element, attrs) {
scope.label = attrs.label;
scope.listItemClick=function(e){
$(e.currentTarget).find('.next-items').slideToggle('fast');
}
scope.moreitemdetails=function(name,type){
$location.path('/home/');
}
}
};
}]);
提前致谢
【问题讨论】:
-
您在指令中创建了一个范围,因此您必须使用 scope.$parent 访问控制器,但这是不好的做法
标签: angularjs angularjs-directive