データが変更されても、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. 複数列レイアウトではなく、単一列レイアウトを使用する1 列のレイアウトにより、全体的な状況をよ...
はじめに<br />誰もが高速インターネット接続にアクセスできるわけではありません。たと...
図に示すように: しかし、IE6で表示すると、right:1px:になります。 IE6 には、幅と高...
この古くからある疑問は、数え切れないほどのフロントエンド開発者やバックエンドプログラマーを悩ませてき...
Web デザインは科学であると同時に芸術でもあります。 Web デザイン作業は、半分は適切なプログラ...
MySQL 認証コマンド grant の使用方法:この記事の例は MySQL 5.0 以降で実行され...
目次製品要件アイデア問題ライブラリ選択をドラッグコンポーネントを生成する方法コンポーネントを生成する...
ウェブサーバー1. Webサーバーは、wev、cgi、asp機能を無効にするなど、不要なIISコンポ...
ヒント1: 集中力を保つ最高のモバイル アプリは、1 つのことを非常にうまく行うことに重点を置いてい...
プレビューアドレス: https://ovsexia.gitee.io/leftfixed/ htm...
HTML と CSS を含む JD.com のホームページの静的ページ効果を 3 日間で完成させます...
1. 問題の説明: MysqlERROR1698 (28000) の解決方法、新しくインストールされ...
ブロックレベル要素の機能: • 常に新しい行から始まり、それ自体で 1 行を占め、後続の要素も新しい...
目次更新可能なビュービューのパフォーマンスビューの制限ビューは MySQL 5.0 以降で導入されま...
管理者権限でcmdを実行する slmgr /ipk CB7KF-BWN84-R7R2Y-793K2-...