【发布时间】:2015-06-06 18:29:09
【问题描述】:
如果指令直接使用控制器,为什么通过别名引用控制器来调用控制器上的方法,而不做任何事情?
假设我们有以下代码:
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
【问题讨论】:
-
从你的最后一句话看来,你已经完全理解了
this(控制器对象)和$scope(控制器中的注入可访问的变量,模板看起来在其中)之间的区别为了)。如果您的问题是“为什么要这样设计?”,这里就跑题了。如果不是,请澄清。
标签: angularjs angularjs-directive