我读过一些类似的回答我的问题控制器通信,如this one虽然不能将其翻译成我自己的要求 - 来自缺乏了解......指令与分离范围与AngularJS
我有一个控制器:
appControllers.controller('TransactionsCtrl', ['$scope', 'InfiniteScrollingDataService', function ($scope, dataService) {
// setup our scope properties
$scope.$root.title = 'Transactions';
var urlQuery = {
skip: 0,
take: 25,
search: '',
order: 'DateTimeCreated',
orderBy: 'desc',
transactionTypeID: null,
transactionStatusID: null
};
var apiUrl = 'api/transactions';
$scope.transactions = new dataService(apiUrl, urlQuery);
$scope.Filter = function (senderParent, type, id) {
$scope.FilterApplied = true;
console.log('filter in controller: ' + senderParent + ' ' + type + ' ' + id);
}
}]);
而且我有一个指令:
appDirectives.directive('bootstrapListItems', ['$rootScope', function ($rootScope) {
return {
restrict: 'A',
templateUrl: 'bootstrapDropDownItems.html',
link: function (scope, element, attrs) {
scope.type = attrs.useGlobaljsonObject;
scope.parentElement = attrs.id;
scope.items = [];
var obj = $rootScope.globalJSON[scope.type];
for (o in obj) {
scope.items.push({ key: o, value: obj[o] })
}
}
}
}]);
而对于我的指令模板:
<script type="text/ng-template" id="bootstrapDropDownItems.html">
<li class="active"><a href="#" class="lnkFilterList">- Any -</a></li>
<li ng-repeat="item in items">
<a href="#" class="lnkFilterList" ng-click="Filter(parentElement, type, item.key)">{{item.value}}</a>
</li>
</script>
如果我不隔离指令的作用域,那么控制器被调用正确,我看到控制台注销我的参数。
但是,我(想)我需要隔离范围,因为该页面上会有这个指令的倍数。
当我添加scope: {}
到我的指令控制器功能不再被调用。
我也尝试将我的ng-click
更改为ng-click="$parent.Filter(.....)"
- 这似乎也没有工作。
任何人都可以请我指出正确的方向吗?
这将有助于解决您的问题http://stackoverflow.com/questions/15991137/calling-method-of-parent-controller-from-a-directive-in-angularjs/15991525#15991525 –