Vue の基本リスナーの詳細な説明

Vue の基本リスナーの詳細な説明

Vueのリスナーとは何か

  • 開発中、data によって返されるオブジェクトにデータを定義し、このデータを補間構文やその他の方法を通じてテンプレートにバインドできます。
  • データが変更されると、テンプレートにバインドされたデータが自動的に更新され、最新のデータが表示されます。ただし、この変更はテンプレート内のデータ値によって自動的に監視されます。
  • 場合によっては、コードロジック内の特定のデータの変更を監視したい場合、リスナーウォッチを使用する必要があります。

公式定義: Vue は、watch オプションを通じてデータの変更に応答するためのより一般的な方法を提供します。このアプローチは、データが変更されたときに非同期またはコストのかかる操作を実行する必要がある場合に最も役立ちます。

キーがリッスンするリアクティブ プロパティ (データまたは計算されたプロパティのいずれかを含む) であり、値が対応するコールバック関数であるオブジェクト。値はメソッド名、または追加オプションを含むオブジェクトにすることもできます。コンポーネント インスタンスは、インスタンス化されると $watch() を呼び出します。deep、immediate、flush オプションの詳細については、$watch を参照してください。

リスナーの使い方

オプション: watch

タイプ: { [key: string]: string | Function | Object | Array}

ウォッチリスナーの構成オプション:

デフォルトでは、watch はデータ参照の変更のみを監視し、データの内部プロパティの変更には応答しません。

このとき、deep オプションを使用してより深くリッスンすることができます。もう 1 つの特性は、最初にすぐに実行することを望んでいることです。このとき、immediate オプションを使用します。このとき、後でデータが変更されるかどうかに関係なく、リスニング関数は 1 回実行されます。

データの内容:

データ() {
    戻る {
        情報:
            名前: 'cgj'
        }
    }
}
時計:
    情報:
        ハンドラ(新しい値、古い値) {
            console.log(新しい値、古い値)    
        }
        深い:本当、
        即時: true、
    }
}

Vue3 のドキュメントには記載されていないが、Vue2 のドキュメントには記載されているもう 1 つのことは、リスニング オブジェクトのプロパティです。

'info.name': 関数(新しい値、古い値) {
    console.log(新しい値、古い値)
}

別の方法は、$watch API を使用することです。

$watch の詳細については、公式 API (あまり使用されていない) を参照してください: サンプル メソッド | Vue.js

const app = createApp({
  データ() {
    戻る {
      a: 1、
      b: 2,
      c: {
        d: 4
      },
      e: 5,
      女性: 6
    }
  },
  時計:
    // トップレベルのプロパティをリッスンする
    a(val, 古いVal) {
      console.log(`新しい: ${val}、古い: ${oldVal}`)
    },
    // 文字列メソッド名 b: 'someMethod',
    // このコールバックは、監視対象オブジェクトのプロパティが変更されたときに呼び出されます。ネストがどれだけ深くてもかまいません。c: {
      ハンドラ(val, oldVal) {
        console.log('c が変更されました')
      },
      深い: 本当
    },
    // ネストされた単一のプロパティをリッスンする
    'c.d': 関数 (val, oldVal) {
      // 何かをする
    },
    // このコールバックはリスニング開始直後に呼び出されます e: {
      ハンドラ(val, oldVal) {
        console.log('変更されました')
      },
      即時: 真
    },
    // コールバックの配列を渡すと、1つずつ呼び出されます f: [
      'ハンドル1',
      関数handle2(val, oldVal) {
        console.log('handle2がトリガーされました')
      },
      {
        ハンドラ: 関数 handle3(val, oldVal) {
          console.log('handle3がトリガーされました')
        }
        /* ... */
      }
    ]
  },
  メソッド: {
    いくつかのメソッド() {
      console.log('bが変更されました')
    },
    ハンドル1() {
      console.log('ハンドル1がトリガーされました')
    }
  }
})
定数 vm = app.mount('#app')
vm.a = 3 // => 新: 3、旧: 1

vue リスナーウォッチ

目標: データ/計算されたプロパティ値の変更を監視できる

文法:

時計:
    「監視されているプロパティの名前」(newVal、oldVal){
    }
}

コード例:

<テンプレート>
  <div>
    <input type="text" v-model="名前">
  </div>
</テンプレート>
<スクリプト>
エクスポートデフォルト{
  データ(){
    戻る {
      名前: ""
    }
  },
  // 目標: 名前の値の変更をリッスンする/*
  文法:
    時計:
      変数名(newVal, oldVal){
        // ここで値に対応する変数名が自動的に変更されます}
    }
  */
  時計:
    // newVal: 現在の値 // oldVal: 以前の値 name(newVal, oldVal){
      コンソールにログ出力します。
    }
  }
}
</スクリプト>
<スタイル>
</スタイル>

要約: プロパティの変更を監視するには、watchメソッドを使用します

Vue リスナー - ディープリスニングと即時実行

目標: データ/計算されたプロパティ値の変更を監視できる

文法:

時計:
    「監視されているプロパティの名前」(newVal、oldVal){
    }
}

コード例:

<テンプレート>
  <div>
    <input type="text" v-model="ユーザー名">
    <input type="text" v-model="ユーザー年齢">
  </div>
</テンプレート>
<スクリプト>
エクスポートデフォルト{
  データ(){
    戻る {
      ユーザー: {
        名前: ""、
        年齢: 0
      }
    }
  },
  // ターゲット: リスニングオブジェクト/*
  文法:
    時計:
      変数名(newVal, oldVal){
        // ここで値に対応する変数名が自動的に変更されます},
      変数名: {
        ハンドラ(newVal, oldVal){
        },
        deep: true, // ディープリスニング(オブジェクトの内部レイヤーで値が変化します)
        immediate: true // すぐにリッスンします (Web ページが開かれたときにハンドラが 1 回実行されます)
      }
    }
  */
  時計:
    ユーザー: {
      ハンドラ(newVal, oldVal){
        //userconsole.log 内のオブジェクト(newVal, oldVal);
      },
      深い:本当、
      即時: 真
    }
  }
}
</スクリプト>
<スタイル>
</スタイル>

要約: 即時リスニング、ディープリスニング、ハンドラー固定メソッドのトリガー

要約する

この記事はこれで終わりです。皆さんのお役に立てれば幸いです。また、123WORDPRESS.COM のその他のコンテンツにも注目していただければ幸いです。

以下もご興味があるかもしれません:
  • vue3.0 のウォッチ リスナーの例の詳細な説明
  • Vue2 と Vue3 でウォッチ リスナーを使用する方法
  • Vue のリスナーの基本的な使用例
  • Vue の計算プロパティとリスナーの使用の概要
  • vueリスナーウォッチでこれを呼び出すときに未定義の問題を解決する
  • Vue 学習ノート: 計算プロパティとリスナーの使用
  • Vue 2.0 リスナーウォッチ属性コードの詳細な説明

<<:  HTML でフォーム コントロールを無効にする 2 つの方法: readonly と disabled

>>:  CSS 疑似要素を使用して複数の連続する要素のスタイルを制御する方法

推薦する

MYSQL 演算子の概要

目次1. 算術演算子2. 比較演算子3. 論理演算子4. ビット演算子5. 演算子の優先順位1. 算...

Dockerコンテナデータボリュームの原理と使用法の分析

コンテナデータボリュームとはデータがコンテナ内にある場合、コンテナを削除するとデータは失われます。例...

12個のJavascriptテーブルコントロール(DataGrid)が整理されています

DataGrid コントロールの DataSource プロパティがデザイン時に設定されている場合、...

フレックスレイアウトとposition:absolute/fixedの競合の詳細な説明

以前、プロジェクトを開発しているときに、flex レイアウトと position:absolute/...

JSを使用して画像を効果的に圧縮する方法

目次序文変換関係具体的な実装file2DataUrl(ファイル、コールバック) file2Image...

ウェブサイトの速度を上げる6つの方法

1. .js ライブラリ ファイルのアドレスを Google CDN アドレスに置き換えます。 (G...

Alibaba Cloud ECSインスタンスのユーザールートパスワードとリモート接続方法を設定する方法

Alibaba Cloud サーバーを購入した後、新しいインスタンスが正常に動作できるようにするには...

vue3.0 プロジェクトを素早く構築するための手順を完了する

目次1. 3.0をより適切にサポートするには、vue/cliのバージョンが4.5.0以上であることを...

JSを使用して簡単な計算機を実装する

JSを使用して、参考用の簡単な計算機を完成させます。具体的な内容は次のとおりです。要件: 入力値は数...

88 秒で 1,000 万件のレコードを MySQL データベース テーブルに挿入する方法

私が使用しているデータベースはMySQLデータベースバージョン5.7ですまずデータベーステーブルを自...

Vueはタブを切り替えてデータの状態を維持する3つの方法を実装します

Vue でタブ切り替えを実装する 3 つの方法1. v-showはコンテンツの切り替えを制御します1...

SMS送信のカウントダウンを実装するJavaScript

この記事では、SMS送信のカウントダウンを実装するためのJavaScriptの具体的なコードを参考ま...

MySQL マスタースレーブ同期遅延の原因と解決策

歴史的な理由により、MySQL レプリケーションは、REDO ログではなく論理バイナリ ログに基づい...

Jira リバース プロキシを実装するための nginx について

概要: nginx リバース プロキシ jira を構成し、https を実装します。Tomcat ...

CSS3 変換遷移ジッター問題の解決

transform: scale(); スケーリングするとIEブラウザでジッターが発生します変換スケ...