哪一个是定义指令控制器的最佳方式。我引用了一些网站,他们解释了Option1。
选项1:
angular.module('app')directive('AppHeader', AppHeader);
function AppHeader() {
var headerDirective = {
restrict: 'E',
templateUrl: 'header.html',
link: linkFunc,
controllerAs: 'vm',
controller: NavCtrl
};
return headerDirective;
function linkFunc(scope, element, attrs) {
/* */
}
}
NavCtrl.$inject = ['$scope', 'Service'];
function NavCtrl($scope, Service) {
var vm = this;
/* Controller actions */
}
在上面的代码中,Controller与指令功能块分开。
选项2:
angular.module('app').directive('AppHeader', AppHeader);
function AppHeader()
{
var headerDirective = {
restrict: 'E',
templateUrl: 'header.html',
link: linkFunc,
controllerAs: 'vm',
controller: NavCtrl
};
return headerDirective;
function linkFunc(scope, element, attrs) {
/* */
}
NavCtrl.$inject = ['$scope', 'Service'];
function NavCtrl($scope, Service) {
var vm = this;
/* Controller actions */
}
}
在上面的代码中,在指令功能块中添加了控制器。
因此,最好的做法是创建和定义Directive控制器以及为什么。提前谢谢。
答案 0 :(得分:0)
关于选项2,您已将该功能限定在您实际使用的位置。
在选项1中,你将函数的范围设置得更高,不需要它是一个级别,因为它不会被重用。
我觉得Option 2使函数的范围正确。
此外,您可能希望将整个Option 2代码包含在IIFE中(立即调用函数表达式)
(function(){
//Your code here
})();
答案 1 :(得分:0)
你应该选择1,因为。
指令的控制器应该在指令的关闭之外。这样就可以消除在返回后将注入创建为无法访问的代码的可能问题。
你应该阅读John Papa的style guide,他解释了有关角度代码样式的各种事情。