作为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提供了一个函数,可以用作特定模块的控制器,而您的代码的其他部分都不应该知道它。