Angular JS:如何在其他服务中使用常数值而不更改它



我是Angular JS的新手,想设置我可以在不同的服务上用作网络服务URL的全局变量。

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

var app;
(function () {
    app = angular.module("ANG", []);
    app.value('user', {
        urlBase: ''
    });
})();

当我想使用此常数值时,我只是在服务限定中定义它并使用它,但我想存储详细信息,以便一次又一次地设置值。

示例:

当我在系统中登录时,我将使用WebServiceUrl返回一些数据,并将该URL设置在login Controller中的value.urlbase中。

但是,当我转到不同的服务并想使用它时,它将值设置为''。

使用常数值的代码:

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

我如何一次存储并一次又一次使用它?

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

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

我们在我们的其中使用object.freeze(),但是您可以使用不变的js或类似的东西来防止突变。

我建议您有另一种服务,而不是价值。

将用户服务传递给您的服务,其中包含可作为属性访问的用户对象,或通过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值,在其他服务中,请从cookie中阅读。这是使用Angular(https://docs.angularjs.org/api/ngcookies/service/qukies)中的$ cookies服务完成的

app.service('loginService', ['$cookie', function ($cookies) {
    $cookies.put('userUrl', 'http://urlhere');
}]);
app.service('servicename', ['$cookie', function ($cookies) {
    console.log($cookies.get('userUrl'));
}]);

另一个选择是使用本地存储,因此有一个这样做并保存状态的示例:

如何使用angularjs将数据存储在本地存储中?

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

最新更新