1)问题是孤立的范围。您无法在控制器作用域中看到该函数。一种解决方案是将函数引用传递给指令:
http://plnkr.co/edit/GorcZZppa8qcIKbQAg2v?p=preview
<body ng-controller="ItemController">
<listitem item="item" item-click="toggleInBasket(item)"></listitem>
</body>
在指令中:
scope: {
'item': '=',
'itemClick': '&'
}
并在模板中:
<div class="tsProductAttribute" ng-click="itemClick(item)">
2) 在指令中创建另一个函数来切换选定状态并调用控制器函数:
angular.module('msfApp').directive('listitem', function () {
return {
templateUrl: 'listitem.html',
restrict: 'E',
scope: {
'item': '=',
'itemClick': '&'
},
link: function(scope, iElement, iAttrs) {
scope.selected = false;
scope.toggleState = function(item) {
scope.selected = !scope.selected;
scope.itemClick(item);
}
}
}
});
并在模板中切换类:
<div class="tsProductAttribute"
ng-class="{'tsProductAttribute--selected': selected}"
ng-click="toggleState(item)">