2017-06-22 80 views
1

在我的AngularJS應用程序中,我必須初始化一些onload值。用init()調用或ng-init初始化數據?

我在這方面寫了一個函數init()

function init() { 
    this.var = 'example'; 
} 

它是更好調用init功能在我的JS腳本的末尾,或與ng-init屬性?

解決方案1 ​​

/* script.js */ 
function init() { /* instructions */ } 
init(); 

解決方案2

/* script.js */ 
function init(){ // instructions // }} 
// Not calling init() here 

<!-- file.html --> 
<div ng-controller="exampleCtrl as example" ng-init="example.init()"> 
+0

解決方案1比'ng-init'好# – Akashii

+0

您能解釋**爲什麼**嗎? – Zooly

+0

https://docs.angularjs.org/api/ng/directive/ngInit。你可以在文檔中看到它 – Akashii

回答

1

ngInit docs

這個指令可以被濫用邏輯的不必要的量添加到您的 模板。 ngInit只有少數幾個適當的用途,例如 用於別名ngRepeat的特殊屬性,如下面演示 所示;並通過服務器端腳本注入數據。除了這些 少數情況下,您應該使用控制器而不是ngInit來初始化範圍內的 值。

所以當你有選擇的時候,總是比較喜歡在控制器中初始化:解決方案1更好。


更廣泛地說,在separation of concerns而言,我會建議寫邏輯控制器。如果您有幾個控制器使用的代碼的公用部分,請將其移至服務中。這將大大簡化您的應用程序在成長過程中的可維護性。

+1

很明顯!謝謝 – Zooly

+0

@Zooly不客氣!很高興我幫助:) – Mistalis

+1

並感謝編輯也^^ – Zooly

1

如果這是要初始化使用它們一些值準備一個頁面,你會使用一個控制器,正確?因此,使用內置的方法對該被叫$onInit() ......

$onInit() { 
    $scope.foo = 'some value'; 
    // Initialise other variables; 
} 

$onInit()加入在AngularJS 1.5組件控制器,但它與所有控制器的工作原理。