データが変更されても、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のソースコードをインストールし、ログインユーザーのパスワードを変更する
GitHub が提供するコード ホスティング サービスと同様に、Docker Hub はイメージ ホ...
目次1. ユーザーとユーザーグループの重要性1) ユーザーの存在意義2) ユーザーグループの重要性2...
chmod コマンド構文chmod コマンドを使用する場合の正しい構文は次のとおりです。 chmod...
VC6.0は確かに古すぎるVC6.0は昔の開発ツールです。現在のwin10では対応していません。しか...
MySQL 開発チームは、2019 年 10 月 14 日に MySQL 8.0.18 GA バージ...
数日前、国産の XHTML エディタを紹介しました。今日は、有名な海外の Web デザイン ブログl...
目次1. ページの概要2. 下限と上限3. ページディレクトリを使用する4. ページの実際の外観4....
目次JavaScript プロトタイプチェーンオブジェクトプロトタイプトップレベルのプロトタイプOb...
序文MySQL データベースを使用する過程では、データベースのバックアップと復元が必要になることがよ...
<br />しばらくの間、多くの人が XHTML の使い方を知らないことに気付きました。...
効果デモ.html <html> <ヘッド> <メタ文字セット=&qu...
多くのウェブサイトでは、ユーザーが簡単に検索したり他のページに移動したりできるように、上部にナビゲー...
参考までにMySQL 8.0.22をダウンロードしてインストールしてください。具体的な内容は次のとお...
目次ブートストラップと関連コンテンツの紹介グリッドシステムネストされた列列オフセット列の並べ替えナビ...
この記事では、参考までに、簡単な計算機を実装するためのJavaScriptの具体的なコードを紹介しま...