1

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

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

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

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

当我想使用这个常量值时,我只需在服务定义中定义它并使用它,但我想将详细信息存储在其中,因此无需一次又一次地设置值。

例子:

当我登录系统时,我会返回一些带有 webserviceurl 的数据,并将该 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);
}

我怎样才能一次存储并一次又一次地使用它?

4

3 回答 3

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 有一个这样做并保留状态的示例:

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

于 2017-02-28T09:02:29.297 回答
1

您实际上可以使用“常量”文件,如下所示:

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

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

于 2017-02-28T08:57:04.073 回答
0
You can use constant files like this.

app = angular.module("ANG", []);
app.constant('user', {
    urlBase: {
          'url':'what ever the URL is'
     }
});
于 2017-02-28T10:48:20.690 回答