Javascript 使用angularjs、ngInit加载视图时初始化范围值的正确方法?

Javascript 使用angularjs、ngInit加载视图时初始化范围值的正确方法?,javascript,angularjs,view,angularjs-scope,angularjs-ng-init,Javascript,Angularjs,View,Angularjs Scope,Angularjs Ng Init,在过去的几周里,我一直在学习angularJs,并一直在研究一些大型应用程序,以了解现实世界中的情况。在大多数视图中,我注意到加载视图时: ng-init="init()" i、 e.在相关控制器中调用函数init()。用于设置初始值 但是(大但)在阅读ngInit上有棱角的文档时,我得到了一个相当严厉的描述: ngInit的唯一适当用途是为ngRepeat的特殊属性别名,如下面的演示所示。除此之外,您应该使用控制器而不是ngInit来初始化作用域上的值 所以我的问题是,, 在加载视图时,使用

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

ng-init="init()"
i、 e.在相关控制器中调用函数init()。用于设置初始值

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

ngInit的唯一适当用途是为ngRepeat的特殊属性别名,如下面的演示所示。除此之外,您应该使用控制器而不是ngInit来初始化作用域上的值

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

这是一种不好的做法,因为视图是在与控制器不同的时间初始化的,摘要循环必须处理该函数,这是对该循环不必要的添加。我想你有这样的想法:

视图:

更好的做法是这样做:

视图:


实际上,我建议您在span中使用ngBind指令,以避免出现闪烁效果,即在呈现页面时javascript未完全加载(例如:),而您在角度文档中是正确的:“最好使用ngBind而不是{{expression}”在Angular编译模板之前,浏览器在其原始状态下暂时显示模板。“这向我表明,在切换到ng-bind之前,您最好先看看是否存在此问题。您可能永远看不到问题,因为您的浏览器可能运行在一流的计算机上。我建议以一种预防的方式使用它,因为它没有缺点。ng-bind只在索引页中真正有用。之后加载的任何html都不会有那种闪烁效果。如果它们有不同的行为,那么肯定会有一些差异。angular文档说,通常需要使用{{}符号。虽然我使用了ng bind来解决您正在讨论的问题,但在看到问题之前,我通常使用{{}}。此外,通常问题与计算机性能无关,而与加载到DOM中的数据以及angular绑定的速度有关。
<div ng-init="init()">
 <span>{{thing}}</span>
</div>
Module.controller('viewController', function(scope){
    ...
    var init = function(){
     scope.thing = "123";
     ...
    }
    ...
})
<div>
 <span ng-bind="thing"></span>
</div>
Module.controller('viewController', function(scope){
 scope.thing = "123";
})