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'
     }
});
Другие вопросы по тегам