我正在阅读这篇文章:
http://teropa.info/blog/2014/10/24/how-ive-improved-my-angular-apps-by-banning-ng-controller.html
建议将控制器集成到这样的指令中,以消除使用ng-controller的需要:
angular.module('contestantEditor', [])
.directive('cContestantEditorForm', function() {
return {
scope: {
contestants: '='
},
templateUrl: 'contestant_editor.html',
replace: true,
controller: 'ContestantEditorFormCtrl',
controllerAs: 'ctrl',
bindToController: true
};
})
.controller('ContestantEditorFormCtrl', function($scope) {
this.contestant = {};
this.save = function() {
this.contestants.push(this.contestant);
this.contestant = {};
};
});
然而,在评论中,其他人提出了这个解决方案:
angular.module('contestantEditor', [])
.directive('cContestantEditorForm', function () {
return {
scope: {
contestants: '='
},
templateUrl: 'contestant_editor.html',
replace: true,
link: function (scope) {
scope.contestant = {};
scope.save = function() {
scope.contestants.push(scope.contestant);
scope.contestant = {};
};
}
};
});
它与控制器版本完全相同,无需制作控制器。因此,我很好奇这两种方法的优缺点与传统上用ng-controller写角度有什么关系,以及控制器在结束时是否是必要的。
答案 0 :(得分:4)
在指令中,您应该尽可能使用链接功能。仅在需要与其他指令进行通信时才使用控制器。
您可以找到有关此讨论的更多信息here。特别是这个最佳实践声明:
当您想要将API公开给其他指令时,最佳实践:使用控制器。否则,请使用链接。
答案 1 :(得分:-1)
指令和控制器是两个完全不同的东西。
指令应该用于DOM操作。
如果你想知道在DDO中使用控制器或者为你的逻辑使用链接功能,那么当你想要提供API并在其他指令中需要你的指令并在其他指令中使用该API时,你应该在DDO中使用控制器扩展指令
控制器不能被指令
取代控制器应该包含您的业务逻辑,它不能被指令替换,不应该有DOM操作。