我有一个工厂进行http调用,在错误回调中我想设置一个属性值,例如this.password = null
,但this.password
并不指向密码。
另一方面,当我执行POST时,数据被正常发送:password: this.password
密码属性的范围应该不同吗?或者我错过了其他什么?
.factory('LogInService', function($http) {
return {
username: null,
password: null,
logIn: function() {
return $http({
method: 'POST',
url: 'http://my-domain/api/signin',
data: {
username: this.username,
password: this.password
}
})
.then(
function(success){
},
function(err){
// reset password field
this.password = null; // <-- not working
}
);
}
}
});
我可以将所有属性和方法设置为var然后返回它,但我更喜欢上面的方法。我的意思是:
var myService = {
// my property and methods...
}
errorCallBack = function(){
myService.password = null;
}
return myService;
答案 0 :(得分:2)
您有一个范围问题。应该很容易做到这样的事情。一如既往,未经测试,但似乎它会起作用。
.factory('LogInService', function($http) {
return {
username: null,
password: null,
logIn: function() {
var svc = this; //<----
return $http({
method: 'POST',
url: 'http://my-domain/api/signin',
data: {
username: svc.username, //<---
password: svc.password //<---
}
})
.then(
function(success){
},
function(err){
// reset password field
svc.password = null; //<----
}
);
}
}
});
答案 1 :(得分:1)
您需要learn about this
。
您可以使用arrow functions修复您的问题,而这不会改变this
的含义。
您可能希望use Babel将ES6代码编译到ES5中,以便浏览器在现代代码库中表现良好。