2017-09-23 8 views
1

Vue.jsのコンポーネントを作成していますが、イベント時にデータを変更する必要があります。イベントが最初に呼び出されたときには、何らかの理由で、私はそれにアクセスすると、それは未定義作成済みまたはマウント済みフックのコンポーネントデータにアクセス

module.exports = { 
    data: function() { 
     return { 
      visible: true 
     } 
    }, 
    mounted: function() { 
     this.eventHub.$on('minimize', function(window_id) { 
      console.log(this.visible); 
      this.visible = !this.visible; 
     }); 
    }, 
    props: ["windowId"] 
} 

として設定されています、data.visibleは、何らかの理由で、未定義です。

私が間違っていることはありますか?

ありがとうございます!

答えて

3

function (window_id)には独自のスコープがありますので、thisにアクセスすることはできません。

これは、self = thisを追加することで解決できます。

let self = this 
this.eventHub.$on('minimize', function(window_id) { 
    console.log(self.visible); 
    self.visible = !self.visible; 
}); 

Nick Rucciが指摘しているように、矢印機能を使用して、self = thisを取り除くこともできます。

this.eventHub.$on('minimize', (window_id) => { 
    console.log(this.visible); 
    this.visible = !this.visible; 
}); 
+0

ホーリーマカロニ、私はダムです。これについて完全に忘れた:D ありがとう! – Nausik

+0

あなたは大歓迎です;) – piscator

+2

@piscator arrow関数はこれを修正し、 'let self = this'を定義するよりもはるかにクリーンです –

関連する問題