2017-08-08 19 views
0

何らかの理由で、Angularプロジェクトのリクエストから応答にアクセスできません。コンソールで印刷することはできますが、data.statusdata.responseにアクセスできますが、data.response.entriesを試してみると、次の問題があります。Angularリクエストから返されたデータにアクセスできない

マイコンポーネント:

transportantions: any[]; //this is on the start of my component together with the rest of my variables 

    getTransportations() { 
    let loader = this.loadingController.create({ 
     content: 'Getting data...' 
    }); 
    loader.present(); 
    this.wpApi.getTransportations() 
     .then(function (data) { 
     console.log(data); 
     if (data.status == 200) { 
      this.transportantions = data.response.entries; 
      loader.dismiss(); 
     } else { 
      console.log('Something was wrong. Error status ' + data.status); 
     } 
     }) 
     .catch(function (err) { 
     loader.dismiss(); 
     console.log('something was wrong: ' + err); 
     }); 
    } 

これはconsole.log(data)

{ 
    "status": 200, 
    "response": { 
    "total_count": "242", 
    "entries": [ 
     { 
     ... 
     }, 
     { 
     ... 
     }, 
     { 
     ... 
     }, 
     ... 
    ] 
    } 
} 

から出力され、私が手にエラーがある:

something was wrong: TypeError: Cannot set property 'transportantions' of undefined

+0

'data.response'を確認してください。あなたは何を得ていますか?正しい出力を得ていますか? –

答えて

2
getTransportations() { 
    let loader = this.loadingController.create({ 
     content: 'Getting data...' 
    }); 
    loader.present(); 
    this.wpApi.getTransportations() 
     .then((data) => { // just change the function format 
     console.log(data); 
     if (data.status == 200) { 
      this.transportantions = data.response.entries; 
      loader.dismiss(); 
     } else { 
      console.log('Something was wrong. Error status ' + data.status); 
     } 
     }) 
     .catch(function (err) { 
     loader.dismiss(); 
     console.log('something was wrong: ' + err); 
     }); 
    } 

は関数形式を変更するだけです。

'this.transportantions'へのアクセスを得るためにfunction(){}フォーマットをthis()=> {}フォーマットに変更します。

矢印関数の詳細

https://www.sitepoint.com/es6-arrow-functions-new-fat-concise-syntax-javascript/

+1

それは働いた。とても感謝します。それが最初のものだったので、あなたのものを選ぶでしょう。時間制限のために7分待つだけです。 – Tasos

+0

ありがとう!喜んでそれが働いた:) –

+0

@タソス私はあなたの答えが第一の論理に同意する場合でも、それがそれと一緒に働く理由を理解することが重要なので、あなたは矢印機能がどのように働くかを理解するためにリンクしたドキュメンテーションを見てください。それは単純なjs関数ではありませんでした。 – Supamiu

2

あなたはfunctionの範囲に現在のコンテキストを維持することができ、代わりに明示的なfunctionarrow functionを使用する必要があります。

getTransportations() { 
    let loader = this.loadingController.create({ 
     content: 'Getting data...' 
    }); 
    loader.present(); 
    this.wpApi.getTransportations() 
     .then((data) => { 
     console.log(data); 
     if (data.status == 200) { 
      this.transportantions = data.response.entries; 
      loader.dismiss(); 
     } else { 
      console.log('Something was wrong. Error status ' + data.status); 
     } 
     }) 
     .catch(function (err) { 
     loader.dismiss(); 
     console.log('something was wrong: ' + err); 
     }); 
    } 

例では、functionスコープのコンテキストを失ったため、thisは未定義です。

関連する問題