2015-07-12 6 views
5

Ich schrieb eine Fabrik von Angular. Es gab einen kritischen Fehler für mich. Ich wanderte um es zu beheben. Schließlich habe ich dieses Problem gelöst ... ohne Grund. Also brauche ich eine klare Beschreibung des unteren Code-Problems.Unterschied zwischen Winkel als globale Variable und Parameter?

Hier ist mein Code A:

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

Und noch ein B ist:

(function (angular) { 
    'use strict'; 

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

Und der Fehler Teil ist:

(function (angular) { 
'use strict'; 

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

Code B funktioniert gut. Code A Fehlermeldung "UserServiceProvider ist unbekannt (kann?)". Ich weiß wirklich nicht, warum der oben erwähnte zwei gleiche Code anders funktioniert. Lass es mich wissen.

Antwort

3

der Verpackung. factory Aufruf in einer Funktion sollte keinen Unterschied machen. Ich denke, du musst auch eine andere Veränderung vorgenommen haben.

Wenn Sie in Ihrem dritten Code-Snippet .module mit zwei Parametern aufrufen, erstellen Sie ein neues Modul. Dies würde das Modul, das Sie entweder in "Code A" oder "Code B" erstellt haben, überschreiben.

Sie verwenden nicht dasselbe Modul, sondern erstellen ein neues. Daher ist es sinnvoll, dass Ihr UserService auf dem neuen Modul nicht existiert.

Ihr letztes Snippet sollte .module('BinD') mit nur einem Parameter aufrufen. Nur der Name des Moduls, das Sie verwenden möchten.

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

 


Eine weitere Option ist, dass Sie .module nur einmal anrufen, und speichern Sie es.

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

Dann können Sie später app.controller oder app.factory aufrufe, ohne über die Syntax zu kümmern.

+0

Aha, also deklariere ich anderes Modul 'BinD' und Modul muss eine externe Variable verwaltet werden. Ist es? –

+0

Ihr zweiter Ansatz funktioniert nie in seinem Fall. Wie im zweiten Teil verwendet er IIFE-Muster. –

+0

@ user3413534 Sie können es in einer externen Variablen verwalten, wenn Sie das einfacher finden. Das ist normalerweise was ich tue. –

2

In Ihrem Code A oder -Code B in beide Teil Sie ein Modul BinD mit der Abhängigkeit von ngSails geschaffen hatte und dann Fabrik Sie registrieren mit diesem Modul, aber Code A wird eine Variable global deklarieren, wenn Sie verwenden es & Code B wird die Codierung mit IIFE-Muster tun, die Ihre Variable nur innerhalb der deklarierten Funktion verfügbar macht. Aber das hängt nicht mit Ihrem Fehler zusammen, den Sie bekommen.

In Ihrem Controller möchten Sie diese Fabrik nutzen, aber während Sie controller schaffen sollten Sie nicht ein neues Modul wie durch angular.module('BinD', ['ngSails']) tun, schaffen, die die zuvor registrierten Fabrik bündig (oder andere Komponenten) mit dem BinD Modul und werden Erstellen Sie ein neues Modul mit dem Namen BinD. Deshalb wirft nach dem Einspritzen UserService in Ihrem Controller einen Fehler, weil die UserService nicht in diesem Modul verfügbar ist.

-Controller

(function (angular) { 
'use strict'; 

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