Angular js: как использовать значения констант в других сервисах, не меняя их
Я новичок в Angular JS и хочу установить глобальную переменную, чтобы я мог использовать ее в различных службах, таких как URL-адрес веб-службы.
Я реализовал app.js (модуль) следующим образом:
var app;
(function () {
app = angular.module("ANG", []);
app.value('user', {
urlBase: ''
});
})();
Когда я хочу использовать значения этих констант, я просто определяю их в определении сервиса и использую их, но я хочу сохранить в них детали, поэтому нет необходимости устанавливать значения снова и снова.
Пример:
Когда я вхожу в систему, я возвращаю некоторые данные с помощью webservice url и устанавливаю этот URL в value.urlBase в контроллере входа.
Но когда я перехожу к другому сервису и хочу использовать его, он устанавливает значения обратно в ''.
КОД для использования постоянных значений:
app.service('servicename', ["$http", "$q", 'user', function ($http, $q, user) {
//access the user here but it gives value ''.
console.log(user.urlBase);
}
Как я могу хранить сразу и использовать его снова и снова?
3 ответа
Вы можете использовать файл 'constants', например, так:
export default angular
.module('my.module', [])
.constant('someConstant', Object.freeze({
foo: 1,
bar: 2
})
.name;
Мы используем Object.freeze() в нашем, но вы можете использовать immutable.js или что-то подобное, чтобы предотвратить мутацию.
Я предлагаю вам другую услугу, а не стоимость.
Передайте userService вашим службам, который содержит объект пользователя, который доступен как свойство или извлекается через метод получения:
app.factory('userService', function() {
var user = {
urlBase: ''
};
return {
user: user
};
};
app.service('servicename', ['userService', function (userService) {
console.log(userService.user.urlBase);
}]);
Затем, где вы устанавливаете urlBase, вы также передаете userService. Сервисы, как правило, одиночные, поэтому они должны сохранять пользователя между другими сервисами.
ОБНОВИТЬ:
Поскольку вам необходимо сохранять детали между обновлениями страницы, cookie-файл не является плохим решением. В вашем loginService вы устанавливаете значение cookie, а в других своих службах считываете из cookie. Это делается с помощью службы $cookies в Angular ( https://docs.angularjs.org/api/ngCookies/service/$cookies).
app.service('loginService', ['$cookie', function ($cookies) {
$cookies.put('userUrl', 'http://urlhere');
}]);
app.service('servicename', ['$cookie', function ($cookies) {
console.log($cookies.get('userUrl'));
}]);
Другой вариант - использовать локальное хранилище, и у этого SO есть пример этого и сохранения состояния:
Как мне хранить данные в локальном хранилище, используя Angularjs?
You can use constant files like this.
app = angular.module("ANG", []);
app.constant('user', {
urlBase: {
'url':'what ever the URL is'
}
});