2015-07-30 7 views
16

Ich möchte eine Variable, die in allen Controllern verwendet werden kann, aber keinen Dienst für sie erstellen möchten. Ist es in angular js möglich?Wie deklariert man eine globale Variable mit Angular Js?

+0

Es ist möglich - siehe @Alan Antwort - aber es wird nicht empfohlen. Was wird die Var enthalten? – Okazari

+4

Sie sollten die Antwort von Aseem verwenden, die Nutzung des $ rootScope für Variablen wird als großer Konstruktionsfehler in der eckigen Welt betrachtet. Aus diesem Grund gibt es Dienstleistungen/Fabriken. – mikeswright49

Antwort

28

Sie können constants or values verwenden.

Konstanten

var app = angular.module('myApp', []); 
app.constant('appName', 'Application Name'); 

app.controller('TestCtrl', ['appName', function TestCtrl(appName) { 
    console.log(appName); 
}]); 

Werte

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

app.value('usersOnline', 0); 
app.controller('TestCtrl', ['usersOnline', function TestCtrl(usersOnline) { 
    console.log(usersOnline); 
    usersOnline = 15; 
    console.log(usersOnline); 
}]); 

http://ilikekillnerds.com/2014/11/constants-values-global-variables-in-angularjs-the-right-way/

+0

Hallo Danke für die Antwort. – Neel

2

Sie könnten diese Variable auf $ rootScope setzen. und injizieren Sie $ rootScope in die Controller, die den globalen verwenden.

9

Verwenden value() ein Objekt, und speichern Sie Ihre globalen Variablen "als Eigenschaften zu definieren, dieses Objekt. Fügen Sie dann das Objekt als Abhängigkeit zu einem beliebigen Controller hinzu, der auf seine Eigenschaften zugreifen muss. Dies hat einen positiven Nebeneffekt, alle Ihre Variablen in ein einzelnes Objekt zu kapseln, was sauber und weniger wahrscheinlich ist, Namespace-Kollision zu erleiden.

Hier ist das Muster:

app.value('myVars', { 
    usersOnline:0 
}); 
app.controller('TestCtrl', ['myVars', function TestCtrl(myVars) { 
    console.log(myVars.usersOnline); 
    myVars.usersOnline = 15; 
    console.log(myVars.usersOnline); 
}]); 

FYI Aseem Antwort wird nicht funktionieren, weil sein Beispiel value() mit einem primitiven Typ verwendet. Um klar zu sein, was nicht funktioniert:

app.value('usersOnline', 0); 
app.controller('TestCtrl', ['usersOnline', function TestCtrl(usersOnline) { 
    console.log(usersOnline); 
    usersOnline = 15; // <-- THIS WILL NOT PERSIST outside the controller. 
    console.log(usersOnline); 
}]); 
+0

Matthew ist genau richtig. Wenn der Wert als Objekt nicht definiert wurde, wird der sich ändernde Wert innerhalb eines bestimmten Controllers nicht nach außen verlängert. –

+0

das funktioniert nicht. – ritesh

Verwandte Themen