2015-07-12 69 views
5

我寫了一個Angular的工廠。對我來說有一個嚴重的錯誤。我徘徊着去修復它。最後,我清除了這個問題......沒有理由。所以我需要清楚地描述下面的代碼問題。作爲全局變量和參數的角度差異?

這裏是我的代碼:

angular 
    .module('BinD', ['ngSails']) 
    .factory('UserService', function ($sails) { 
     ... 
    }); 

而另一個B是:

(function (angular) { 
    'use strict'; 

    angular 
    .module('BinD', ['ngSails']) 
    .factory('UserService', function ($sails) { 
     ... 
    }); 
})(angular); 

和錯誤的部分是:

(function (angular) { 
'use strict'; 

angular 
    .module('BinD', ['ngSails']) 
    .controller('SignUpCtrl', function ($scope, $window, UserService) { 

代碼B效果很好。代碼發出錯誤消息「UserServiceProvider未知(可能?)」。我真的不知道爲什麼前面提到的兩個相同的代碼有不同的作用。讓我知道它。

回答

3

中包裝。在函數中調用應該不會有任何區別。我認爲你必須做出不同的改變。

在您的第三個代碼段中,當您使用兩個參數調用.module時,將創建一個新模塊。這會覆蓋您在「代碼A」或「代碼B」中創建的模塊。

您並未重複使用同一模塊,而是創建一個新模塊。因此,您的UserService在新模塊上不存在是有道理的。

您的最後一個片段應該只用一個參數調用.module('BinD')。只是你想要使用的模塊的名稱。

angular 
    .module('BinD') 
    .controller('SignUpCtrl', function ($scope, $window, UserService) { 

 


另一種選擇是,你只叫.module一次,並保存它。

var app = angular.module('BinD', ['ngSails']); 

後來的後來,你可以叫app.controllerapp.factory,而不必擔心語法。

+0

啊哈,所以我聲明不同的模塊'BinD'和模塊必須被管理一個外部變量。是嗎? –

+0

你的第二種方法將永遠不會在他的情況下工作..在第二部分中,他正在使用IIFE模式。 –

+0

@ user3413534如果您發現更容易,您可以在外部變量中對其進行管理。這通常是我所做的。 –

2

在你代碼A代碼B在你創造了一個模塊BinDngSails的依賴,然後要註冊工廠,該模塊既一部分,但代碼A將在全球範圍,如果聲明一個變量您正在使用它& 代碼B將使用IIFE模式進行編碼,這將使您的變量僅在聲明的函數內可用。但是這與你所得到的錯誤無關。

內部控制器你想利用那個工廠,但是當你創建controller你不應該做angular.module('BinD', ['ngSails'])創造這樣一個新的模塊,這將之前註冊的工廠(或其他部件)與BinD模塊沖洗和意志創建一個名稱爲BinD的新模塊。這就是爲什麼在您的控制器中注入UserService後拋出$injector錯誤,因爲UserService在該模塊內不可用。

控制器

(function (angular) { 
'use strict'; 

angular 
    .module('BinD') //<- utilizing already created module 
    .controller('SignUpCtrl', function ($scope, $window, UserService) {