2015-07-30 4 views
16

Я хочу переменную, которая может использоваться во всех контроллерах, но не хочет создавать для нее сервис. Возможно ли это в угловых js?Как вы объявляете глобальную переменную, используя Angular Js?

+0

Возможно - посмотрите на @Alan answer - но это не рекомендуется. Что будет содержать var? – Okazari

+4

Вы должны использовать ответ Асеема, используя $ rootScope для переменных, считается большим недостатком дизайна в угловом мире. Именно поэтому существуют службы/фабрики. – mikeswright49

ответ

28

Вы можете использовать constants or values.

Константы

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/

+0

Привет, спасибо за ответ. – Neel

2

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

9

Использование 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); 
}]); 
+0

Матфей в точности прав. Если не удалось определить значение как объект, изменение значения внутри конкретного контроллера не будет затягиваться снаружи. –

+0

это не работает. – ritesh

Смежные вопросы