2015-09-08 39 views
0

哪一個是定義指令控制器的最佳方式。我介紹了一些網站,他們解釋了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 */ 
} 

在從指示功能塊分離上述代碼控制器。

選項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 */ 
    } 
} 

在指示功能塊加入上述代碼控制器。

那麼哪一個是創建和定義指令控制器和原因的最佳實踐。提前致謝。

回答

0

關於選項2,您已將功能範圍限定在您實際使用的範圍內。

在選項1中,您將函數的作用域設置得更高一些,沒有必要將它設置爲上面的級別,因爲它不會被重用。

我覺得選項2使得功能範圍正確。

而且你可能想括在IIFE整個選項2碼(立即調用函數表達式)

(function(){ 
    //Your code here 

})(); 
0

你應該選擇1,因爲去了。

指令的控制器應該在指令的閉包之外。這樣可以消除注入在返回後被創建爲不可達代碼的可能問題。

你應該閱讀約翰帕帕的style guide,他解釋了所有關於代碼造型的角度。