データが変更されても、DOM ビューはすぐには更新されません。変更直後にノードまたはその値を取得しようとすると、結果は未定義になる可能性があります。これは、Vue が応答性を実装するのは、データの変更後に DOM がすぐに変更されるからではなく、特定の戦略に従って DOM を更新するためです。 小さなデモを見てみましょう: アプリ.vue <テンプレート> <div id="アプリ"> <div ref="メッセージ">{{メッセージ}}</div> <div v-if="msg1">{{msg1}}</div> <button @click="changeMsg">メッセージを変更する</button> </div> </テンプレート> <スクリプト> エクスポートデフォルト{ 名前: 'アプリ'、 データ(){ 戻る { メッセージ:「こんにちは Vue」 メッセージ1: ''、 } }, 方法:{ 変更メッセージ(){ this.msg = 'こんにちは世界'; this.msg1=this.$refs.message.innerHTML; console.log("DOM を更新する前: "+this.msg1) } } } </スクリプト> <スタイル> #アプリ { フォントファミリ: 'Avenir'、Helvetica、Arial、sans-serif; -webkit-font-smoothing: アンチエイリアス; -moz-osx-font-smoothing: グレースケール; テキスト配置: 中央; 色: #2c3e50; 上マージン: 60px; } </スタイル> コードを実行すると、this.$nextTick メソッドで DOM 操作を実行しないと、this.$refs.message.innerHTML の値に以前の初期値が引き続き保存されることがわかります。 コードを変更します: アプリ.vue <テンプレート> <div id="アプリ"> <div ref="メッセージ">{{メッセージ}}</div> <div v-if="msg1">{{msg1}}</div> <button @click="changeMsg">メッセージを変更する</button> </div> </テンプレート> <スクリプト> エクスポートデフォルト{ 名前: 'アプリ'、 データ(){ 戻る { メッセージ:「こんにちは Vue」 メッセージ1: ''、 } }, 方法:{ 変更メッセージ(){ this.msg = 'こんにちは世界'; // this.msg1=this.$refs.message.innerHTML; // console.log("DOM を更新する前: "+this.msg1) this.$nextTick(()=>{ this.msg1=this.$refs.message.innerHTML; console.log("DOM を更新した後: "+this.msg1) }) } } } </スクリプト> <スタイル> #アプリ { フォントファミリ: 'Avenir'、Helvetica、Arial、sans-serif; -webkit-font-smoothing: アンチエイリアス; -moz-osx-font-smoothing: グレースケール; テキスト配置: 中央; 色: #2c3e50; 上マージン: 60px; } </スタイル> コードを変更すると、公式 Web サイトで説明されているように、this.$nextTick を使用して更新された値を簡単に受け取ることができることがわかります。遅延されたコールバックは、次の DOM 更新サイクルが終了した後に実行されます。更新された DOM を取得するには、データを変更した直後にこのメソッドを使用します。 コードを変更して比較してみましょう。 アプリ.vue <テンプレート> <div id="アプリ"> <div ref="メッセージ">{{メッセージ}}</div> <div v-if="msg1">{{msg1}}</div> <button @click="changeMsg">メッセージを変更する</button> </div> </テンプレート> <スクリプト> エクスポートデフォルト{ 名前: 'アプリ'、 データ(){ 戻る { メッセージ:「こんにちは Vue」 メッセージ1: ''、 } }, 方法:{ 変更メッセージ(){ this.msg = 'こんにちは世界'; this.msg1=this.$refs.message.innerHTML; console.log("DOM を更新する前: "+this.msg1) this.$nextTick(()=>{ this.msg1=this.$refs.message.innerHTML; console.log("DOM を更新した後: "+this.msg1) }) } } } </スクリプト> <スタイル> #アプリ { フォントファミリ: 'Avenir'、Helvetica、Arial、sans-serif; -webkit-font-smoothing: アンチエイリアス; -moz-osx-font-smoothing: グレースケール; テキスト配置: 中央; 色: #2c3e50; 上マージン: 60px; } </スタイル> コードを変更すると、this.$nextTick(callback) の役割が簡単にわかります。callback はコールバック関数であり、DOM を操作するために実行します。 適用シナリオ:
DOM の更新は非同期であるため、v-if ディレクティブが DOM 要素の追加と削除を決定するのと同様に、メソッド内で変数に値を割り当てるときに this.$nextTick() を使用しないと、初期値を取得してしまう可能性があります。更新された値を取得したい場合は、this.$nextTick() メソッドを使用する必要があります。 以上がVueにおけるnextTickの詳しい内容です。Vueについてさらに詳しく知りたい方は、123WORDPRESS.COM内の他の関連記事もぜひご覧ください! 以下もご興味があるかもしれません:
|
<<: Tomcat での jar のロードに関する異常な問題の分析と解決
>>: LinuxにMySQLデータベース5.6のソースコードをインストールし、ログインユーザーのパスワードを変更する
1. HTMLコードコードをコピーコードは次のとおりです。経験値: <span class=...
目次js ディープコピーデータ保存方法浅いコピー/深いコピーとは何か一般的なディープコピーの実装1....
実際のWebページ開発でも、アコーディオンは頻繁に登場します。簡単なアコーディオンを作ったのですが、...
目次1. シーンの読み込み2. ノードを見つける1. ノード検索2. その他のノード操作3. 再生ア...
1. ウェブサイトのホームページのハイパーテキスト ドキュメントの構成構造は、ユーザーの注意をできる...
この記事の例では、リストのシームレスなスクロールを実現するためのvueの具体的なコードを参考までに共...
目次概要プロミスレースメソッド約束の再パッケージ化中止コントローラAxiosプラグインにはキャンセル...
この記事の例では、ふるい抽選を実装するためのミニプログラムの具体的なコードを参考までに共有しています...
まず公式サイトにアクセスしてダウンロードし、MySQLダウンロードをクリックします。 ダウンロードし...
js 日付時刻形式日付と時刻を指定された形式に変換します。例: YYYY-mm-dd HH:MM は...
今日、Baidu でページを検索したところ、ページが削除されていたため、当然 Baidu スナップシ...
フォームのアクションは URL ジャンプとは異なります。フォームはバックグラウンドにデータを渡すこと...
目次序文クイックレビュー: JavaScript 関数関数とは何ですか?関数を宣言する関数の呼び出し...
導入MySQL の SQL クエリ ステートメントで is null、is not null、!= ...
Linux 仮想マシン: VMware + Ubuntu 16.04.4 Windows ネイティブ...