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

Jay*_*kla 38 angularjs

我正在学习角度.我不明白onLoad和ng-init之间用于初始化变量的区别.在哪个范围内创建此变量.

For example

<ng-include onLoad="selectedReq=reqSelected" src="'partials/abc.html'"></ng-include>
Run Code Online (Sandbox Code Playgroud)

OR

<ng-include ng-init="selectedReq=reqSelected" src="partials/abc.html"></ng-include>
Run Code Online (Sandbox Code Playgroud)

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

Wor*_*red 51

ng-init是一个指令,可以放在div's,spans,无论什么,而是onload一个特定于ng-include指令的属性,作为一个ng-init.看看我的意思尝试类似的东西:

<span onload="a = 1">{{ a }}</span>
<span ng-init="b = 2">{{ b }}</span>
Run Code Online (Sandbox Code Playgroud)

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

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


aaa*_*aaa 24

从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>
Run Code Online (Sandbox Code Playgroud)

在这种情况下,每次加载局部视图时都会调用myFunction.

<div ng-include="partialViewUrl" ng-init="myFunction()"></div>
Run Code Online (Sandbox Code Playgroud)

然而,在这种情况下,myFunction仅在加载父视图时被调用一次.