2013-08-26 41 views
35

我正在學習角度。我不明白onLoad和ng-init用於變量初始化的區別。在哪個範圍內創建這個變量。角度上的onLoad和ng-init之間的區別

For example

<ng-include onLoad="selectedReq=reqSelected" src="'partials/abc.html'"></ng-include> 

OR

<ng-include ng-init="selectedReq=reqSelected" src="partials/abc.html"></ng-include> 

也請給我約隔離範圍的一些想法。

回答

49

ng-init是可被置於其內div的,span的,不管,而onload是特定於ng-include指令其功能如同一個ng-init的屬性的指令。要明白我的意思你可以試試:

<span onload="a = 1">{{ a }}</span> 
<span ng-init="b = 2">{{ b }}</span> 

你會看到,只有第二個出現。

隔離範圍是一個範圍,它不會從其父範圍原型繼承。用外行的話說,如果你有一個不需要任意讀寫父範圍的小部件,那麼你在小部件上使用隔離範圍,這樣小部件和小部件容器就可以自由使用它們的範圍而不會覆蓋對方的屬性。

21

從角的文檔,

NG-INIT不應該被用於任何初始化。它只能用於別名。如果任何表達式需要(由NG-包括)的局部視圖被加載後進行評估 https://docs.angularjs.org/api/ng/directive/ngInit

的onload應該被使用。 https://docs.angularjs.org/api/ng/directive/ngInclude

它們之間的主要區別是當與ng-include一起使用時。

<div ng-include="partialViewUrl" onload="myFunction()"></div> 

在這種情況下,myFunction的被稱爲每次局部視圖被加載。

<div ng-include="partialViewUrl" ng-init="myFunction()"></div> 

然而,在這種情況下,myFunction的被稱爲只有當父視圖被加載一次。

0

適合我。

<div ng-show="$scope.showme === true">Hello World</div> 
<div ng-repeat="a in $scope.bigdata" ng-init="$scope.showme = true">{{ a.title }}</div>