開発の過程では、インスタンスの vm.$refs(this.$refs) を使用して、ref で登録されたコンポーネントを取得し、対応する操作を実行することがよくあります。しかし、要素が取得できない場合があります。根本的な原因は、$refs はマウント (レンダリング) された後でのみ要素を取得できることです。 たとえば、この場合、フラグが true 値から false 値に切り替わるとノードを取得できないのは正常です。v-if が false 値の場合、ノードはレンダリングされないためです。 ただし、false 値から true 値に切り替えると、ノードを取得できなくなる可能性があります。これはレンダリングに時間がかかるためです。これは通常、$nextTick() を使用して解決できます。 ... <el-table v-if="フラグ" ref="テーブル"> <el-table-column prop="prop1"></el-table-column> <el-table-column prop="prop2"></el-table-column> </el-table> ... エクスポートデフォルト{ メソッド: { this.$refs.table.XXX() } } しかし、非常に特殊なケースがあります。ページが初めてレンダリングされるとき、$refs は値を取得できません。このとき、コンポーネント要素を非表示にしたり表示したりするには、v-show を考慮する必要があります。 v-show は CSS display:none によって非表示になっているため、最初にレンダリングされ、要素が確実に取得されます。 補足: Vue.js で ref ($refs) を使用する例とヒント 1. 公式文書による使用法の要約:Vue.js ドキュメントの ref セクションを参考に、後で参照できるように ref の使い方をまとめました。 1. refは外部コンポーネントで使用される HTML部分 <div id="ref-outside-component" v-on:click="consoleRef"> <コンポーネントの親 ref="outsideComponentRef"> </コンポーネントの父> <p>ref は外側のコンポーネントにあります</p> </div> js部分 var refoutsidecomponentTem = { テンプレート:"<div class='childComp'><h5>私は子コンポーネントです</h5></div>" }; var refoutsidecomponent = 新しいVue({ el:"#ref-outside-component", コンポーネント:{ "コンポーネントの父":refoutsidecomponentTem }, 方法:{ コンソールRef:関数() { console.log(this); // #ref-outside-component vue インスタンス console.log(this.$refs.outsideComponentRef); // div.childComp vue インスタンス } } }); 2. Refは外部要素に使用されます HTML部分 <!--ref は外側の要素にあります --> <div id="ref-outside-dom" v-on:click="consoleRef" > <コンポーネントの父> </コンポーネントの父> <p ref="outsideDomRef">ref は外側の要素にあります</p> </div> JS部分 var refoutsidedomTem = { テンプレート:"<div class='childComp'><h5>私は子コンポーネントです</h5></div>" }; var refoutsidedom = 新しい Vue({ el:"#ref-outside-dom", コンポーネント:{ "コンポーネントの父":refoutsidedomTem }, 方法:{ コンソールRef:関数() { console.log(this); // #ref-outside-dom vue の例 console.log(this.$refs.outsideDomRef); // <p> ref は外側の要素にあります</p> } } }); 3. Refは内部の要素に使用されます --- ローカル登録コンポーネント HTML部分 <!-- 内部の要素を参照 --> <div id="ref-inside-dom"> <コンポーネントの父> </コンポーネントの父> <p>ref は要素内にあります</p> </div> JS部分 var refinsidedomTem = { テンプレート:"<div class='childComp' v-on:click='consoleRef'>" + 「<h5 ref='insideDomRef'>私は子コンポーネントです</h5>」 + "</div>", 方法:{ コンソールRef:関数() { console.log(this); // div.childComp vue インスタンス console.log(this.$refs.insideDomRef); // <h5 >私は子コンポーネントです</h5> } } }; var refinsidedom = new Vue({ el:"#ref-inside-dom", コンポーネント:{ "コンポーネントの父":refinsidedomTem } }); 4. Refは内部の要素に使用されます --- グローバル登録コンポーネント HTML部分 <!-- 要素内の参照 -- グローバル登録 --> <div id="ref-inside-dom-all"> <ref-inside-dom-quanjv></ref-inside-dom-quanjv> </div> JS部分 Vue.component("ref-inside-dom-quanjv",{ テンプレート:"<div class='insideFather'> " + "<input type='text' ref='insideDomRefAll' v-on:input='showinsideDomRef'>" + " <p>内部の要素の参照 - グローバルに登録</p> " + "</div>", 方法:{ showinsideDomRef:function() { console.log(this); //これは実際にはdiv.insideFatherです console.log(this.$refs.insideDomRefAll); // <input type="text"> } } }); var refinsidedomall = new Vue({ el:"#ref-inside-dom-all" }); 2. 気をつけるべき落とし穴1. v-for トラバーサルを通じて異なる参照を追加する場合は、: 記号を追加することを忘れないでください。つまり、:ref = 変数です。 これは他の属性と同じです。固定値の場合は、: 記号を追加する必要はありません。変数の場合は、: 記号を追加することを忘れないでください。 2. :ref = 変数でrefを追加します(つまり:を追加します)。refを取得したい場合は、this.$refs[refsArrayItem] [0]のように[0]を追加する必要があります。:ref = 変数ではなくref = 文字列の場合は、this.$refs[refsArrayItem]のように追加する必要はありません。 追加する場合と追加しない場合の違い [0] - 展開されていない 追加することと追加しないことの違い [0] - 拡大 3. 要素 UI ダイアログボックスが開いた後に DOM を取得する場合は、this.$refs を直接使用するのではなく、$nextTick を使用する必要があります。imgLocal2: console.log('this.$refs.imgLocal2 の外側', this.$refs.imgLocal2); タイムアウトを設定する(() => { console.log('this.$refs.imgLocal2 setTimeout', this.$refs.imgLocal2); }, 500); // 推奨されません this.$nextTick(() => { console.log('this.$refs.imgLocal2 $nextTick', this.$refs.imgLocal2); }); 上記は私の個人的な経験です。参考になれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。間違いや不備な点がありましたら、遠慮なくご指摘ください。 以下もご興味があるかもしれません:
|
<<: 携帯電話番号の真ん中の4桁を隠すMySQL SQL文の方法
>>: 2018 年にリリースされる Apache Spark 2.4 の新機能は何ですか?
この記事では、Windows Server オペレーティング システムのインストールと企業でのそのア...
このソリューションの利点はシンプルさと使いやすさですが、欠点はダウンタイムが長くなることです。 した...
Vue プロジェクトの開発プロセスでは、ローカル デバッグの利便性のため、通常、vue.config...
記事は主にUbuntu 20.04の簡単なインストールプロセスを記録し、インストール後に国内ソースを...
1. Linux で Selenium を使用する1. Chromeをインストールする次のコマンドを...
最近、何人かの友人から、仮想マシンに CentOS をインストールした後、ifconfig コマンド...
序文プロジェクトの要件は、ユーザーの現在の位置が特定の地理的位置範囲内にあるかどうかを判断することで...
最初の解決策は、イメージを公開イメージリポジトリにプッシュし、それをプルダウンすることです。 2 番...
目次1. ピニアとは何ですか? 2. Piniaは使いやすい3. ユーザーエクスペリエンス1. ピニ...
目次序文yarn create は何をしますか?ソースコード分析プロジェクトの依存関係テンプレート構...
目次序文1. ロックとは何ですか? 2. InnoDBストレージエンジンのロック2.1 ロックの種類...
以下にリストされているすべてのブログはオリジナルであり、独自にデザインされています。これらは、他者が...
まず、例を見てみましょう。記事テーブルにはタイプフィールドがあり、1 見出し、2 おすすめ、3 ホッ...
nginx パニック問題に関しては、まず nginx の起動プロセス中に、マスター プロセスが構成フ...
純粋なCSS3で蝶が羽ばたく様子を再現。まずはその効果をご覧ください どうですか?効果はかなりいいで...