在http post函数内调用angular 2函数

时间:2017-11-14 05:15:53

标签: angular

我有一个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在外面。

3 个答案:

答案 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');
    })
}