Vue での this.$set の動的データバインディングのケーススタディ

Vue での this.$set の動的データバインディングのケーススタディ

インターネット上の this.$set の説明はわかりにくいと感じます。単一データ、オブジェクト、配列、json データのバインディングについてまとめます。

では、早速コードを見てみましょう。

<テンプレート>
  <div>
    <!-- 単一データ -->
    <button @click="text0a">テキスト0</button>
    <p>テキスト0: {{text0}}</p>
    <!-- オブジェクト -->
    <button @click="textObja">テキストオブジェクト</button>
    <p>textObj.text1: {{textObj.text1}}</p>
    <!-- 配列 -->
    <button @click="textArra">テキストArr</button>
    <p>テキストArr[1]: {{テキストArr[1]}}</p>
    <!-- json データ -->
    <button @click="textJsona">テキストJson</button>
    <p>textJson[1].t5: {{textJson[1].t5}}</p>
  </div>
</テンプレート>
<スクリプト>
エクスポートデフォルト{
  データ() {
    戻る {
      テキスト0: ''、
      テキストオブジェクト: {},
      テキスト配列: [],
      テキストJson:[
        {t0: ''},
        {t4: ''},
        {t7: ''},
      ]
    }
  },
  メソッド: {
    テキスト0a: 関数() {
      vm = this とします
      text100 = 'efghjk' とします
      vm.$set(vm,'テキスト0',テキスト100) 
      //vm.$set(vm,'text0','efghjk') と同等
    },
    テキストオブジェクト: 関数 () {
      vm = this とします
      textObj100 = {とする
        テキスト1: '123',
        テキスト2: '456'
        }
      vm.$set(vm.textObj,'text1',textObj100.text1) 
      //これはvm.$set(vm,'textObj',textObj100)と同等です
    },
    テキストArra: 関数() {
      vm = this とします
      textArr200 = ['a1','a2','a3'] とします。
      vm.$set(vm,'textArr',textArr200)
    },
    テキストJSONA: 関数() {
      vm = this とします
      textJson300 = [ とします。
        {t1: 't1'、t2: 't2'、t3: 't3'},
        {t4: 't4'、t5: 't5'、t6: 't6'}、
        {t7: 't7'、t8: 't8'、t9: 't9'},
      ]
      vm.$set(vm.textJson[1],'t5',textJson300[1].t5) 
      //これは vm.$set(vm,'textJson',textJson300) と同等です
    }
  }
}
</スクリプト>
<スタイル>
</スタイル>

補足: Vue は $set を使用してデータの属性を動的に設定します

実際の開発プロセスでは、モデルをフォーム要素にバインドするときに、バインドされた要素の属性がバックグラウンド データに基づいて動的に生成されます。従来の割り当て方法を使用すると、ビューを更新することはできません

使用する必要がある

this.$set(データ名、キー名、キー値)
エクスポートデフォルト{
 データ:{
  //まず空のオブジェクトformObjectを定義します:{},
  配列リスト:[],
 },
 マウント() {
  この.initPage()
 },
 方法:{
  initPage(){
   this.$store.dispatch(namespace/callData).then(res=>{
    // データのキーと値を設定する
    res.data.forEach(item=>{
     // ❗❗❗❗❗ this.formObject[item.name] = item.value // ❗❗❗❗ このメソッドはビューを更新できません this.$set(this.formObject, item.name, item.value) // ✅✅✅✅ビューを更新できます})
   })
   // 配列を変更します this.$store.dispatch(namespace/callData).then(res=>{
    // データのキーと値を設定する
    this.$set(this.arrayList,0,(res.data)[0].id) ✅✅✅✅ビューを更新できます})
  }
 }
}

上記は私の個人的な経験です。参考になれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。間違いや不備な点がありましたら、遠慮なくご指摘ください。

以下もご興味があるかもしれません:
  • Vue.set() と this.$set() の使い方と違い
  • Vue エラー TypeError の解決方法: this.$set は関数ではありません
  • Vue.set() this.$set() はビューの更新と考慮をトリガーします
  • Vue ソースコードから Vue.set() と this.$set() を解析する
  • Vue での this.$set の使用に関する詳細な説明

<<:  MySQL の nvl() 関数に似た ifnull() 関数についての簡単な説明

>>:  MySQL フルテキスト検索の中国語ソリューションとサンプルコード

推薦する

JS はシンプルな todoList (メモ帳) 効果を実装します

メモ帳プログラムは、HTML + CSS + JavaScript の 3 つの主要なフロントエンド...

Linux でリモート サーバー ファイルの状態を表示する方法

以下のように表示されます。 test コマンドはファイルが存在するかどうかを判断します。 ssh u...

Linux で MySQL のスケジュールバックアップを実装する方法

実際のプロジェクトでは、緊急事態を防ぐためにデータベースを頻繁にバックアップする必要があります。しば...

Docker の Windows ストレージ パス設定操作

Windows 10 に Docker をインストールする場合、コンテナタイプを Linux コンテ...

MySQL シリーズ: MySQL リレーショナル データベースの基本概念

目次1. 基本概念2. データベース管理技術の開発3. リレーショナルデータベース(RDBMS)の概...

Webpack-cliが正常にインストールされたら、詳細についてはwebpack -vエラーケースを確認してください。

目次質問1. webpack webpack-cliをインストールする2. webpackのバージョ...

HTML メタの使用例

使用例コードをコピーコードは次のとおりです。 <!DOCTYPE html> <!...

Vueタブとキャッシュページを切り替えるいくつかの方法

目次1. 切り替え方法2. タブを動的に生成する3. キャッシュコンポーネント3.1 キープアライブ...

vue+openlayer をベースにマップの集約と散乱効果を実現

目次序文:結果: 1.重合効果: 2. 散布効果:具体的な実装手順: 1. プロジェクトにOpenL...

HTML の POST リクエストにおける a タグの 2 つの使用法の分析

HTML POST リクエストで a タグを使用する 2 つの例を次に示します。 1. ajaxを使...

JavaScriptイベント実行メカニズムの深い理解

目次序文ブラウザJS非同期実行の原理ブラウザのイベントループ実行スタックとタスクキューマクロタスクと...

Vueカスタムディレクティブを使用してドラッグアンドドロッププラグインを構築する方法

HTML5 のドラッグ アンド ドロップ機能は誰もが知っていますが、これを使用するとドラッグ アンド...

完全なMySQL学習ノート

目次MyISAM と InnoDBパフォーマンスの低下と SQL の速度低下の理由: MySQL 実...

Vue Routerはバックグラウンドデータに応じて異なるコンポーネントをロードします

目次実際のプロジェクトで遭遇する要件実装が間違っているところもある私は個人的に、実装するより良い方法...