2016-12-31 161 views
0

我作为角度1.5和更低的新手遇到错误。我正在练习几个在线课程,并且都使用不同版本的角色1.我试图接近John Papa的风格指南,特别是使用IIFE和Controller As,但我一直存在问题。一个问题是关于包装IIFE的IIFE的角度控制器

(function() { 

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

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

内单独的文件中的控制器是这始终是可取的,还是有地方这种类型的代码将打破执行情况?

+0

这是一个IIFE(即时调用的函数表达式)而不是IFFE – 4castle

+2

好像是'MyCtrl()'''}右括号丢失 –

+0

没有理由使用每个IIFE都会导致问题。什么具体的错误被抛出? – charlietfl

回答

2

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

如果您的代码未包含IIFE,则父范围将包含变量MyCtrl。我们希望保持MyCtrl的私密性,因为你永远不会自己调用这个函数。

现在你的问题可能是,“如果所有这些代码是私有的,并没有什么这个范围之内可以访问MyCtrl调用或使用它,这有什么意义?我是什么,甚至在做什么?”

这并不是“破坏执行”的原因是因为我们只是在做我们需要什么,并让Angular从中取得它。

如果你读你的代码,你真正做的是说:

“嘿,角以所谓‘应用’和 已定义的模块给它一个控制器,我定义为MyCtrl。名称 控制器'MyCtrl'。“

这就是你所有的代码需要做的。你已经给Angular一个函数来作为一个特定模块的控制器,并且你的代码的其他部分不应该知道它。

+1

有时一个很好的描述性外行人的术语答案是没有很多技术术语需要什么+1 – charlietfl

+0

是的谢谢。总是欣赏短短的'杜'答案。 :) –