我的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;
}
}]);
答案 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);
}());