Javascript ngInit与点火控制器功能-有哪些缺点?
关于Javascript ngInit与点火控制器功能-有哪些缺点?,javascript,angularjs,Javascript,Angularjs,关于ng init的使用,我有几个问题-我在网上看到很多人建议在控制器准备好后立即使用ng init来运行所需的功能 如果我有两个VIE使用同一个控制器,但我只希望其中一个视图触发一个特定的控制器函数,比如 index.html <div ng-controller="myController"> {{ someStuff }} </div> <div ng-controller="myController" ng-init="run()">
ng init
的使用,我有几个问题-我在网上看到很多人建议在控制器准备好后立即使用ng init
来运行所需的功能
如果我有两个VIE使用同一个控制器,但我只希望其中一个视图触发一个特定的控制器函数,比如
index.html
<div ng-controller="myController">
{{ someStuff }}
</div>
<div ng-controller="myController" ng-init="run()">
{{ someOtherStuff }}
</div>
在这个场景中,使用ng init调用run()
的真正缺点是什么?如果run()
是一个异步函数,是否会出现任何问题
在我看来,这似乎是一个不错的工作,但我可能已经掩盖了为什么这是一个坏主意。欢迎您的任何意见 我个人避免使用
ng init
,除非没有其他方法可以解决我的问题。这正是nginit
应该用来做的,但是你会发现nginit
到处都是不好的用法
根据ng init
文档:
此指令可能被滥用,以便在模板中添加不必要的逻辑量。ngInit只有一些合适的用途,例如,在下面的演示中可以看到,为ngRepeat的特殊属性别名;以及通过服务器端脚本注入数据。除了这几种情况之外,还应该使用控制器而不是ngInit来初始化作用域上的值
更好的办法是简单地使用另一个控制器,并将模板与控制器1:1映射。Thansk Ben,我曾想过创建另一个控制器,但我也希望代码尽可能简短-假设如果我想达到最佳效果,这将帮不上忙-practices@KuraiBankusu,我想说你使用
nginit
在这里没有通过。让我们这样说吧。。。我在多个大型(100多个控制器)AngularJS应用程序上工作过。我从未在应用程序中使用过nginit
。任何一天,我都会因为不当使用ng init
而使用两个逻辑相似的控制器。@KuraiBankusu,我就到此为止。如果您正在考虑使用nginit
,请先问问自己是否有其他方法来完成您正在尝试的操作。如果还有别的办法,就这么做。如果真的没有其他方法,请使用nginit
。我正在写一个答案,但这个答案似乎说明了我所做的大部分事情。但是,我确实想添加另一点:ng init
是一个优先级为450的指令,因此它会受到DOM中其他具有更高优先级的指令的影响,或者受到编译指令之前运行的控制器函数的影响。这可能会导致意外的结果。此外,无论何时从HTML触发应用程序逻辑,都会创建不必要的、令人困惑的抽象和紧密耦合。您正在创建这样一种条件:将来查看代码的人必须在一个文件中看到run()
函数,然后在另一个文件中找到该函数以解释它的功能。对该组件的期望不太清楚。
.controller('myController', function($scope){
$scope.someStuff = 'ABC';
$scope.run = function(){
$scope.someOtherStuff = 'XYZ';
}
}