角度指令控制器的最佳实践

时间:2015-09-08 12:45:18

标签: javascript angularjs angularjs-directive controller

哪一个是定义指令控制器的最佳方式。我引用了一些网站,他们解释了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控制器以及为什么。提前谢谢。

2 个答案:

答案 0 :(得分:0)

关于选项2,您已将该功能限定在您实际使用的位置。

在选项1中,你将函数的范围设置得更高,不需要它是一个级别,因为它不会被重用。

我觉得Option 2使函数的范围正确。

此外,您可能希望将整个Option 2代码包含在IIFE中(立即调用函数表达式)

(function(){
   //Your code here

})();

答案 1 :(得分:0)

你应该选择1,因为。

指令的控制器应该在指令的关闭之外。这样就可以消除在返回后将注入创建为无法访问的代码的可能问题。

你应该阅读John Papa的style guide,他解释了有关角度代码样式的各种事情。