Я хочу знать, как вызывать функцию, находящуюся в контроллере, в элементе шаблона ng-click. Я должен использовать эту директиву на многих страницах. Мне нужно обработать событие click на соответствующих страницах контроллера. Нижеприведенный код вызывает функцию click (moreitemdetails), находящуюся в директиве. Я попытался установить область как moreitemdetails: '='
. Он также не работает.Одиночная угловая директива js и множество контроллеров
Я использую директиву
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 в рамках другой директивы. Цитируя предыдущий пример (everythin такое же, за исключением определения директивы и действия в 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/');
}
}
};
}]);
Заранее спасибо
Вы создаете область в вашей директиве для этого вы должны получить доступ к контроллеру с помощью области видимости $ родителя, но это было бы плохой практикой –