Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/425.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript ngInit与点火控制器功能-有哪些缺点?_Javascript_Angularjs - Fatal编程技术网

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';
    }
}