前提・実現したいこと
Vue.js(Vuetify)で,ページの読み込み時にオブジェクトを更新し,ブラウザ上の表にデータを表示しようとしています.GASのSPAです.
手順としては,
0. Vueのdata内に空の配列を用意する
0. createdの時点でgoogle.script.run.withSuccessHandlerを用いてスプレッドシートから配列を持ってくる(JSON形式)
0. 戻り値をparseし,Object.assignを用いて配列を更新
0. v-data-tableの:items(method)が実行され,更新された配列が表示される
発生している問題・エラーメッセージ
配列更新の直後(上記3の段階)にログを確認すると値が反映されているので,更新の時点でリアクティブでなくなっていると考えられます.こちらによると,Object.assign()を用いて作成されたオブジェクトは元のオブジェクトと抱き合わせにすれば変更をトリガしてくれるはずなのですが(ここの認識が間違っていたら教えてください),表の中身は空っぽのようです.エラーログは出ていません.望んでいる解決方法としては,ここのオブジェクトをリアクティブのまま更新する方法が知りたい,あるいはリアクティブなオブジェクトを生成する他の方法が知りたい,です.
データは数十列数万行あるため,ループ処理などは避けたいと思っています.
該当のソースコード
html
1<!DOCTYPE html> 2 (中略) 3 <template> 4 <v-data-table 5 (中略) 6 :items:"function1" 7 (中略) 8 > 9 </v-data-table> 10 </template> 11</html>
Javascript
1<script> 2 new Vue ({ 3 data(){ 4 return{ 5 arrays:[], //表示させたい配列の入れ物 6 }, 7 }, 8 methods:{ 9 function1 () { //テーブル表示用 10 let table = []; 11 table = this.arrays; 12 (中略) //絞り込み処理 13 return table; 14 } 15 }, 16 created():{ 17 google.script.run.withSuccessHandler(function(value){ 18 value = JSON.parse(value); 19 this.arrays = Object.assign({}, this.arrays, value); 20 console.log(arrays); //このログは意図していたもの(読み込んだデータすべて)が出る 21 }) 22 .function2(); //スプレッドシートから配列を持ってくる,戻り値value 23 }, 24 }) 25</script>
試したこと
- 入れ物の配列arraysにあらかじめ要素を入れておく(入っていた要素の表は出ましたが更新はされませんでした)
- 配列要素として追加する(setでもspliceでも,pushでもis not functionエラーか,property undefinedが出ました)
- function1の括弧を外す(is not functionエラーが出ました)
- createdの中にfunction1を書く(is not functionエラーが出ました)
補足情報(FW/ツールのバージョンなど)
vsCodeで書いたコードをclaspで反映させてchromeで確認しています.
Vueのバージョンは確か2のままで3にはしていなかったと思います.
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2021/01/22 10:05