Если директива напрямую использует контроллер, почему вы вызываете метод на контроллере, ссылаясь на контроллер по его псевдониму, не делая ничего?Путаный случай при использовании контроллера и контроллера. В директиве
Представьте, что мы имеем следующий фрагмент кода:
var app = angular.module('App', []);
app.controller('MyController', ['$scope', function($scope) {
$scope.doAction = function() {
alert("controller action");
}
this.doAction2 = function() {
alert("controller action 2");
}
}]);
app.directive('myDirective', [function() {
return {
restrict: 'E',
scope: {},
controller: 'MyController',
controllerAs: 'myCtrl',
bindToController: true,
template: "<a href='#' ng-click='myCtrl.doAction()'>Click it!<a><br><a href='#' ng-click='myCtrl.doAction2()'>Click it #2!<a> " ,
link: function($scope, element, attrs, controller) {
console.log($scope);
}
}
}]);
Хотя первая ссылка не будет работать, второй будет. Чтобы первая работала, мне пришлось бы отказаться от псевдонима, то есть вместо вызова действия ng-click='myCtrl.doAction()'
называть его следующим: ng-click='doAction()'
Не должно ли оно работать с использованием псевдонима? Я имею в виду, вы гораздо больше шансов найти и использовать контроллер, где разработчик прикрепленные действия к $scope
объекту, а не к this
Из вашего последнего предложения видно, что вы прекрасно понимаете разницу между «этим» (объектом-контроллером) и «$ scope» (переменная, доступная путем впрыска в контроллер и в которой ищет шаблон). Если ваш вопрос: «Почему это так?», Здесь нет темы. Если нет, уточните пожалуйста. – Blackhole