在浏览egghead视频时,关于Directive to directive communication的视频建议我们使用控制器向'this'对象添加函数并从其他指令访问它。
视频中使用的完整代码:Adding functions to this object
相关的控制器代码如下:
controller: function($scope){
$scope.abilities = [];
this.addStrength = function(){
$scope.abilities.push("Strength");
}
this.addSpeed = function(){
$scope.abilities.push("Speed");
}
this.addFlight = function(){
$scope.abilities.push("Flight");
}
},
我想知道而不是在'this'中添加函数,为什么不将它添加到$ scope本身,特别是当我们使用隔离范围时?
代码向$ scope添加函数:Adding functions to $scope
相关的控制器代码如下:
controller: function($scope){
$scope.abilities = [];
$scope.addStrength = function(){
$scope.abilities.push("Strength");
};
$scope.addSpeed = function(){
$scope.abilities.push("Speed");
};
$scope.addFlight = function(){
$scope.abilities.push("Flight");
};
},
或者为什么控制器功能完全正常。为什么我们不能使用link函数来实现相同的结果?
在链接函数中向$ scope添加函数:Using link funtciont instead of controller
相关的控制器和链接功能如下:
controller: function($scope){
$scope.abilities = [];
$scope.addStrength = function(){
$scope.abilities.push("Strength");
};
$scope.addSpeed = function(){
$scope.abilities.push("Speed");
};
$scope.addFlight = function(){
$scope.abilities.push("Flight");
};
},
我很确定使用控制器和此对象是有正当理由的。我无法理解为什么。
答案 0 :(得分:4)
你可以公开link
函数中的函数并获得相同的结果是正确的。指令控制器有点奇怪,但是当我编写更复杂的指令时,我已经决定将更多的行为推送到控制器中并将与DOM相关的东西留在link
函数中。原因是:
我通常只在可能存在复杂的状态转换,处理外部资源(即$ http)或者重用是一个问题时才引入控制器。
你应该注意Angular 1.2在指令上公开'controllerAs',它允许你直接使用指令模板中的控制器,并减少$ scope组合引入的一些仪式。