40

我正在学习角度。我不明白 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>

还请给我一些关于隔离范围的想法。

4

3 回答 3

52

ng-init是一个指令,可以放置在div's, span's 等内部,而onload是一个特定于ng-include作为ng-init. 要了解我的意思,请尝试以下操作:

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

你会看到只有第二个出现。

隔离作用域是指原型上不从其父作用域继承的作用域。通俗地说,如果您有一个不需要任意读写父范围的小部件,那么您可以在小部件上使用隔离范围,以便小部件和小部件容器可以自由使用它们的范围,而不会覆盖彼此的属性。

于 2013-08-26T10:49:01.357 回答
25

从角度的文档中,

ng-init不应该用于任何初始化。它应该只用于混叠。 https://docs.angularjs.org/api/ng/directive/ngInit

如果在加载局部视图(通过 ng-include)后需要评估任何表达式,则应使用 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仅在加载父视图时调用一次。

于 2015-08-10T08:37:54.433 回答
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>
于 2017-11-18T05:58:16.560 回答