2016-12-31 142 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

是的謝謝。總是欣賞短短的'杜'答案。 :) –