我有这个工厂:
app.factory('user', function($http) {
var state; // logged state
function login(data) {
$http.post('/login', {..}).success(function(data) {
this.state = 1;
});
console.log(this.state); // undefined
return this.state;
}
return {
login: login
}
});
当我尝试在控制器中使用它时:
app.controller('TestCtrl', function(user) {
this.login = function() {
alert(user.login(this.data)); // undefined
};
});
我做错了什么?我在其他项目中有相同的代码,它在那里工作。
答案 0 :(得分:1)
this
不引用该服务。这就是为什么你得到一个undefined
,除了console.log
在回调之外。
如果您在服务开头缓存 this
,您应该会有更好的结果:
var service = this;
在回调中,将state
存储在service
:
service.state = 1;