Как вы объявляете глобальную переменную с помощью Angular Js?

Я хочу переменную, которая может использоваться во всех контроллерах, но не хочет создавать для нее сервис. Возможно ли это в angular js?

Ответы

Ответ 1

Вы можете использовать константы или значения .

Константы

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

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

Значение

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/

Ответ 2

Используйте value() для определения объекта и сохранения ваших глобальных переменных в качестве свойств этого объекта. Затем добавьте объект в зависимость от любого контроллера, которому необходимо получить доступ к его свойствам. Это имеет положительный побочный эффект, заключающийся в инкапсуляции всех ваших переменных в один объект, который является аккуратным и менее вероятным для столкновения пространства имен.

Здесь шаблон:

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 не будет работать, потому что в его примере используется value() с примитивным типом. Чтобы понять, что не работает:

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);
}]);

Ответ 3

Вы можете установить эту переменную на $rootScope. и вводить $rootScope в контроллеры, которые будут использовать глобальные.