2017-06-29 24 views
0

テーブル行の値を受け取り、それをリストに入れたjqueryのクリック機能があります。次に、vue配列と同じリストを設定します。ここには配列があります。 アレイ:Vue配列が更新されない

tableRow: [ 
       { 
        "name": "1", 
        "numSongs": "2", 
        "Year": "3" 
       } 
      ] 

が機能:

$("#table1 tr").click(function() { 
     var list = []; 

     var $row = $(this).closest("tr"), 
      $tds = $row.find("td"); 

     list.push({ name: $tds.eq(0).text(), numSongs: $tds.eq(1).text(), Year: $tds.eq(2).text() }); 
     this.tableRow = list; 
     console.log(this.tableRow); 
    }); 

私はまた、リストの値のアプリがロードされ、ときに私はそれをクリックして、それが変化しないのログを記録。 console output

次に、値が単純なアラート機能に変更されたかどうかをテストする機能があります。

しかし、値が関数で更新されない理由は分かりますか?コードは

export default { 

    data() { 
     return { 
      tableRow: [ 
       { 
        "name": "1", 
        "numSongs": "2", 
        "Year": "3" 
       } 
      ] 
     } 
    }, 
    mounted: function() { 
     console.log(this.tableRow); 
     this.$nextTick(() => { 
      $("#table1 tr").click(function() { 
       var list = []; 

       var $row = $(this).closest("tr"), 
        $tds = $row.find("td"); 

       list.push({ name: $tds.eq(0).text(), numSongs: $tds.eq(1).text(), Year: $tds.eq(2).text() }); 
       this.tableRow = list; 
       console.log(this.tableRow); 
      }); 
     }); 
    }, 

    methods: { 
     greet: function() { 
      // `this` inside methods points to the Vue instance 
      alert('Hello ' + this.tableRow[0].name) 
     }, 
} 
} 
+0

私はちょうど今の質問にそれを追加しましたVUEインスタンスコード –

+0

を表示することができます。 – DanielM96

答えて

3

これはあなたのクリックハンドラでthis

のスコープの問題が原因であるあなたtableRowはVUEのインスタンスにデータオプションのプロパティをあるthis.tableRow = listを行っている

Vueのインスタンスけどthisがvueインスタンスを指していない場合は、イベントを呼び出す要素を参照します。

だから、このようにそれを実行します。

mounted: function() { 
    var self = this; 
    console.log(this.tableRow); 
    this.$nextTick(() => { 
     $("#table1 tr").click(function() { 
      var list = []; 

      var $row = $(this).closest("tr"), 
       $tds = $row.find("td"); 

       list.push({ name: $tds.eq(0).text(), numSongs: $tds.eq(1).text(), Year: $tds.eq(2).text() }); 
       self.tableRow = list; 
       console.log(this.tableRow); 
     }); 
    }); 
}, 
+0

これは役に立ちます – DanielM96

+0

@ DanielM96: –

+0

[Vueで "this"を使用して]いくつかの追加情報があります(https://stackoverflow.com/documentation/vue.js/9350/using-this-in- vue#t = 201706291623105439049) – thanksd

関連する問題