[解決済み] V-modelと子コンポーネント?
2022-11-25 19:34:58
質問
フォームを作成し、v-modelを使用して入力をバインドしています。
<input type="text" name="name" v-model="form.name">
次に、入力を取り出して独自のコンポーネントにしたいのですが、子コンポーネントの値を親オブジェクトにどのようにバインドするのでしょうか。
form.name
?
どのように解決するのですか?
v-model
は構文糖です。
<input v-bind:value="something" v-on:input="something = $event.target.value">
を実装するために
v-model
ディレクティブを実装します。
-
を指定します。
value
のプロップを指定します。 - で計算されたプロパティを作成します。 computed setter を持つコンピューテッドプロパティを作ります (コンポーネントの内部からプロップの値を修正してはならないため)。
-
を定義します。
get
メソッドを定義します。value
プロパティの値 -
を定義します。
set
メソッドを定義します。input
イベントを発生させます。
以下は簡単な例です。
Vue.component('my-input', {
template: `
<div>
My Input:
<input v-model="inputVal">
</div>
`,
props: ['value'],
computed: {
inputVal: {
get() {
return this.value;
},
set(val) {
this.$emit('input', val);
}
}
}
})
new Vue({
el: '#app',
data() {
return {
foo: 'bar'
}
}
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.3/vue.min.js"></script>
<div id="app">
<!-- using v-model... -->
<my-input v-model="foo"></my-input>
<!-- is the same as this... -->
<my-input :value="foo" @input="foo = $event"></my-input>
{{ foo }}
</div>
おかげさまで kthornbloom が以前の実装の問題を発見してくれたことに感謝します。
Vue 3での変更点
ドキュメントによると によると、Vue 3 では v-model の実装に大きな変更が加えられています。
-
value
->modelValue
-
input
->update:modelValue
関連
-
Vueプロジェクトのビルド共通設定ファイル、request.jsとvue.config.js
-
[解決済み] Vuex - 計算されたプロパティ "name "が割り当てられたが、セッターを持たない
-
[解決済み] Vue.js - ネストされたデータを適切に監視する方法
-
[解決済み] Vuetify グリッドレイアウト v-layout v-flex
-
[解決済み】vuexからストアの値を監視する方法は?
-
[解決済み】親イベントで子コンポーネントの関数を呼び出す方法
-
[解決済み] vuejs ルータのオプションのパラメータ
-
[解決済み] Vue.js:各コンポーネントインスタンスにユニークなIDを設定するには?
-
[解決済み] Vueの「エクスポートデフォルト」と「新しいVue」の比較
-
[解決済み] vue.jsファイルにコメントを付けるには?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] v-if内部の複雑な条件
-
vue リクエストエラー Uncaught (プロミス内)
-
[解決済み] Vue.jsでグローバルフィルタを大量に追加する方法は?
-
vue springboot reports error DOMException: XMLHttpRequest'の'send'の実行に失敗しました。ロードに失敗しました
-
[解決済み】TypeError: this.getOptions は関数ではありません。
-
[解決済み】Vue.jsでv-onにイベントと引数を渡す。
-
[解決済み】名前空間が設定された2つのVuexモジュール間でアクションをディスパッチする方法はありますか?
-
[解決済み】Vueのデータからhrefに値を渡すには?
-
[解決済み] Vue CLI CSSプリプロセッサーオプション:dart-sass VS node-sass?
-
[解決済み] Vueの「エクスポートデフォルト」と「新しいVue」の比較