典型服务可能如下所示:
(function() {
angular.module('module').service('SomeService', SomeService);
SomeService.$inject = ['$http'];
function SomeService($http) {
var service = {
login: login,
logout: logout,
userState: null //object for logged in status, points etc (is there a convention for what to initialize this to?)
}
return service;
login(){ //$http implementation }
logout(){ //implementation }
}
})();
login
修改userState
是有意义的,但我如何从服务中做到这一点。由于login
被提升到SomeService
构造函数的顶部,因此无法访问service.userState
。另一种方法是放置逻辑来修改控制器中的userState
...换句话说,返回$ http登录承诺,然后让控制器将userState
设置为SomeService.user.loggedIn = true
,但是那会被认为是坏的,因为现在控制器确定用户是否已登录?那个逻辑不应该属于服务吗?
我能想到的一件事是使用函数表达式/ IIFE - 我不想这样做,因为这涉及将实现细节带到文件的顶部。
答案 0 :(得分:1)
如果您不想将userState
编辑出服务,只需要一个getter函数来获取值,如果我的理解是正确的。
(function(){ angular.module('module')。service('SomeService',SomeService);
SomeService.$inject = ['$http'];
function SomeService($http) {
var userState = null;
var service = {
login: login,
logout: logout,
getUserState: getUserState
}
return service;
function login(){ //$http implementation and you can use $promise to change userState to true here }
function logout(){ //implementation and you can use $promise to change userState to null here }
function getUserState(){ return userState; }
}
})();