Angular js:如何在不更改其他服务的情况下使用常量值

时间:2017-02-28 08:53:58

标签: angularjs global-variables global angular-module

我是Angular js的新手,想要设置全局变量,我可以在不同的服务上使用它作为webservice url。

我已经实现了这样的app.js(模块):

var app;
(function () {
    app = angular.module("ANG", []);

    app.value('user', {
        urlBase: ''
    });
})();

当我想使用这个常量值时,我只是在服务定义中定义它并使用它但我想存储细节,所以不需要一次又一次地设置值。

示例:

当我在系统中登录时,我使用webserviceurl返回一些数据,然后在登录控制器的value.urlBase中设置该URL。

但是当我转到不同的服务并希望使用它时,它会将值设置回''。

使用常量值的代码:

app.service('servicename', ["$http", "$q", 'user', function ($http, $q, user) {
//access the user here but it gives value ''.
console.log(user.urlBase);
}

如何立即存储并反复使用?

3 个答案:

答案 0 :(得分:1)

你实际上可以使用'常数'文件,如:

export default angular
  .module('my.module', [])
  .constant('someConstant', Object.freeze({
    foo: 1,
    bar: 2
  })
  .name;

我们在我们中使用Object.freeze(),但您可以使用immutable.js或类似的东西来防止变异。

答案 1 :(得分:1)

我建议你有另一项服务,而不是价值。

将userService传递给您的服务,该服务包含可作为属性访问或通过getter检索的用户对象:

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中读取。这是使用Angular中的$ cookies服务(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有一个这样做并保留状态的例子:

How do I store data in local storage using Angularjs?

答案 2 :(得分:0)

You can use constant files like this.

app = angular.module("ANG", []);
app.constant('user', {
    urlBase: {
          'url':'what ever the URL is'
     }
});