2015-07-30 20 views
16

Chcę zmiennej, które mogą być używane we wszystkich kontrolerów, ale nie chcesz utworzyć dla niego usługi. Jest to możliwe w kanciastych js?jak zadeklarować zmienną globalną za pomocą Angular Js?

+0

Jest to możliwe - patrz odpowiedź @Alan - ale nie jest to zalecane. Co zawiera plik var? – Okazari

+4

Powinieneś użyć odpowiedzi Aseem, wykorzystanie $ rootScope dla zmiennych jest uważane za dużą wadę konstrukcyjną w kątowym świecie. Dlatego istnieją usługi/fabryki. – mikeswright49

Odpowiedz

28

Możesz skorzystać z constants or values.

Stałe

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

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

wartości

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

Cześć dzięki za odpowiedź. – Neel

2

Możesz ustawić tę zmienną w $ rootScope. i wstrzyknąć $ rootScope do kontrolerów, które będą używały globalnego.

9

Zastosowanie value() zdefiniować obiekt i przechowywać 'zmienne globalne' jako właściwości ten obiekt. Następnie dodaj obiekt jako zależność do dowolnego kontrolera, który musi uzyskać dostęp do jego właściwości. Ma to pozytywny efekt uboczny enkapsulacji wszystkich zmiennych w jeden obiekt, który jest uporządkowany i mniej podatny na kolizję przestrzeni nazw.

Oto wzór:

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

FYI odpowiedź Aseem nie będzie działać, bo jego przykład używa value() z prymitywnego typu. Aby wyjaśnić, co nie działa:

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 ma dokładnie rację. Jeśli nie uda się zdefiniować wartości jako obiektu, zmiana wartości wewnątrz określonego kontrolera nie zostanie przedłużona na zewnątrz. –

+0

to nie działa. – ritesh

Powiązane problemy