角度全局变量

时间:2014-08-09 12:04:57

标签: javascript angularjs

我的Angular应用程序中设置了以下代码,用于设置全局用户变量。我想知道我写的东西能否以更好的方式重构。我不知道为什么但是在app.run上触发setUser()函数感觉有点笨重?可以改进以下内容吗?

app.run()

app.run(function ($user) {
    $user.setUser();
});

app.service(' $用户&#39)

app.service('$user', ['$http', function ($http) {    
    var currentUser;
    this.setUser = function () {
        $http.get('/users/active/profile')
            .success(function (user) {
                currentUser = user;
            })
            .error(function () {
                console.log('ERR');
            })
    }    
    this.getUser = function () {
        return currentUser;
    }    
}]);

2 个答案:

答案 0 :(得分:0)

你可以这样做。

app.service('$user', ['$http', function ($http) {

    var currentUser;

    var usrSrv = {
        setUser : function () {
            currentUser = "test user";
            console.log( "user Set" );
        },
        getUser : function() {
            return currentUser;
        }
    };

    usrSrv.setUser();
    return usrSrv;

}]);

您可能还想研究使用角度承诺(https://docs.angularjs.org/api/ng/service/ $ q),因为这是异步调用。根据上下文和您的设计,您可能希望将服务更改为仅公开getUser方法,getUser方法将进行http调用并返回在从服务器获取结果时解析的promise。

答案 1 :(得分:0)

尝试以下操作:

(function () {
var userService = function ($http) {

    var setUser = function () {
        $http.get('/users/active/profile')
            .success(function (user) {
                var currentUser = user;
            })
            .error(function () {
                console.log('ERR');
            });
    };

    return {
        currentUser: currentUser,
    };

};
var module = angular.module("app");

module.factory("userService", userService);
}());