角度中onLoad和ng-init之间的区别

时间:2013-08-26 10:16:22

标签: angularjs

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

还请给我一些关于孤立范围的想法。

3 个答案:

答案 0 :(得分:51)

ng-init是一个可以放在divspan的内容中的指令,而onload是特定于ng-include的属性用作ng-init的指令。看看我的意思尝试类似:

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

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

隔离范围是一种范围,它不会从其父范围原型继承。在非专业人员的术语中,如果你有一个不需要随意读取和写入父作用域的小部件,那么你在小部件上使用一个隔离作用域,这样小部件和小部件容器就可以自由地使用它们的作用域而不会覆盖彼此的属性。 / p>

答案 1 :(得分:23)

来自angular的文档,

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

答案 2 :(得分: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>