使用angularjs,ngInit加载视图时,初始化范围值的正确方法是什么?

Aid*_*Gee 5 javascript view angularjs angularjs-scope angularjs-ng-init

过去几周我一直在学习angularJs,并且正在研究一些大型应用程序,以了解现实世界中的工作原理.在大多数情况下,我注意到加载视图时:

ng-init="init()"
Run Code Online (Sandbox Code Playgroud)

即在相关控制器中调用函数init().用于设置初始值.

但是(很大但是)在阅读ngInit上的角度文档时,我得到了一个相当严厉的描述:

"ngInit唯一适当的用于别名ngRepeat的特殊属性,如下面的演示所示.除了这种情况,你应该使用控制器而不是ngInit来初始化作用域上的值."

所以我的问题是,在加载视图时使用ngInit初始化作用域中的值是不好的做法?如果是这样,为什么会这样?什么是正确的方法?

Fou*_*rth 7

这是不好的做法,因为视图在与控制器不同的时间初始化,并且摘要周期必须处理该功能,这是该周期的不必要的添加.我假设你有类似的东西:

视图:

<div ng-init="init()">
 <span>{{thing}}</span>
</div>
Run Code Online (Sandbox Code Playgroud)

控制器:

Module.controller('viewController', function(scope){
    ...
    var init = function(){
     scope.thing = "123";
     ...
    }
    ...
})
Run Code Online (Sandbox Code Playgroud)

更好的做法是这样做:

视图:

<div>
 <span ng-bind="thing"></span>
</div>
Run Code Online (Sandbox Code Playgroud)

控制器:

Module.controller('viewController', function(scope){
 scope.thing = "123";
})
Run Code Online (Sandbox Code Playgroud)

  • 实际上,我建议你在span中使用ngBind指令来避免闪烁效果是在呈现页面时javascript没有完全加载(例如:<span data-ng-bind ="thing"> </ span> ) (2认同)