我有一个http post功能。
login(){
var data = {
email : this.name,
password : this.pass,
appId : this.appId
};
console.log(data);
this.http.post(SERVER_URL+"/templatesAuth/authenticateForApp",data)
.subscribe(function(res){
let requestParams = {
"token": res.token,
"email": data.email,
"name": res.user.name,
"phone": res.user.phone,
"streetNumber": res.user.streetNumber,
"streetName": res.user.streetName,
"country": res.user.country,
"city": res.user.city,
"zip": res.user.zip,
"type": 'internal',
"appId":res.user.appId,
"registeredUser": res.user.sub
};
},
function(err){
alert('login failed');
})
}
在function(req){ }
内我无法编写或使用examplearray.push();
等来电
我总是有错误无法读取属性'推送'未定义的
当我使用本地存储功能时,如。
this.localStorageService.set('test'+this.appId,(requestParams));
错误:无法读取属性'设置'未定义的
但我可以在function(req){ }
旁边使用它们。无法弄清楚问题
有没有办法让requestParams在外面。
答案 0 :(得分:5)
这是范围界定的常见问题:
只需更改行
即可.subscribe(function(res){
到
.subscribe((res) => {
另一种做法是:
.subscribe(function(res){ ... }).bind(this)
好文章:https://toddmotto.com/es6-arrow-functions-syntaxes-and-lexical-scoping/ 并查看以下答案:Difference between arrow function and bind()
答案 1 :(得分:2)
您应该使用箭头功能。使用箭头功能时,不会覆盖属性 把它改成,
.subscribe((res) => {
答案 2 :(得分:1)
试试这个
this.http.post(SERVER_URL+"/templatesAuth/authenticateForApp",data)
.subscribe((res) => {
let requestParams = {
"token": res.token,
"email": data.email,
"name": res.user.name,
"phone": res.user.phone,
"streetNumber": res.user.streetNumber,
"streetName": res.user.streetName,
"country": res.user.country,
"city": res.user.city,
"zip": res.user.zip,
"type": 'internal',
"appId":res.user.appId,
"registeredUser": res.user.sub
};
},
function(err){
alert('login failed');
})
}