作为angular 1.5及更低版本的新手,我遇到了错误。我正在练习一些在线课程,并且所有课程都使用不同版本的angular1。我试图与John Papa的风格指南保持紧密联系,尤其是IIFE和Controller As的使用,但我仍然遇到问题。问题是关于将控制器包装在IIFE内部的单独文件中

(function() {

          angular
               .module('app')
               .controller('MyCtrl', MyCtrl);

           function MyCtrl() {
              var vm = this;
              vm.title = 'hello world';
      })();


这始终是明智的选择吗?还是存在这种类型的代码会中断执行的情况?

最佳答案

使用IIFE的主要原因是不污染全局范围。

如果您的代码未使用IIFE包装,则父作用域将包含变量MyCtrl。我们希望保持MyCtrl私有,因为您永远不会自己调用该函数。

现在您的问题可能是:“如果所有这些代码都是私有的,并且该范围之外的任何人都无法访问MyCtrl来调用或使用它,那有什么意义?我什至在做什么?”

之所以不会“中断执行”,是因为我们只做我们需要做的事情,然后让Angular从那里接受它。

如果您阅读代码,则实际上是在说:


  “嘿,Angular。使用已经定义的名为'app'的模块,
  给它一个我定义为MyCtrl的控制器。命名
  控制器“ MyCtrl”。”


这就是您的代码所要做的全部。您已经为Angular提供了一个函数,可以用作特定模块的控制器,而您的代码的其他部分都不应该知道它。

09-25 19:04