Vue入力値変更と変化の検出 & 子から親にデータを渡す方法(v-model、@change)
Vue入力値変更と変化の検出 & 子から親にデータを渡す方法(v-model、v-on:change)
自分のテンプレート内での変化を検出するパターンと、子テンプレートでの変化を検出し親に情報を渡すパターンの2つを考えてみる。
自分のテンプレート内での変化を検出
手順
①タグにv-modelを設定する (v-model="変数")
↓
②dataオプションで変数を定義する
↓
③タグに@changeイベントを設定する(@change="イベント名")
↓
④methodsオプションで処理を定義する
①と②、③と④がそれぞれ対となる。
※注意点
・v-modelで指定した変数の値と画面入力が連動する
・「@」は「v-on:」の省略形
@change
= v-on:change
<template>
<div>
<v-col
cols="12"
sm="3">
<v-text-field
<!--①v-modelを設定-->
v-model="text"
<!--③changeイベントを設定-->
@change="applyChanges" />
</v-col>
<p>
<!--v-modelのデータ連動確認用-->
・v-modelのデータ: {{text}}
</p>
</div>
</template>
<script>
export default {
data(){
return{
//②v-model用の変数を定義
text: "初期値"
}
},
methods:{
//④changeイベント用のメソッドを定義
applyChanges(){
console.log("text-filedが変更されました")
}
}
}
</script>
実行結果の確認
▼変更前の状態。
▼変更後の状態
v-modelでデータが連動。changeイベントが発火している。
子から親へのデータ受け渡し
大まかな流れは、子テンプレでデータ発信を準備し、親側で受け取る用意をする。
子:①タグにv-modelを設定 (v-model="変数")
↓
子:②dataオプションで変数を定義
↓
子:③タグに@changeイベントを設定(@change="イベント名")
↓
子:④methodsオプションで発信処理を定義 (★親に引き渡すイベントと変数)
↓
親:⑤受け取ったイベント名を属性で定義し親のイベントに引き継ぐ (@受けとたイベント名 = "親のイベント名")
↓
親:⑥methodsオプションで処理を定義 (引数で子の変数を受け取る)
↓
親:⑦受け取ったデータをいれる変数を定義(dataオプション)
↓
親:⑧受け取ったデータを画面上に表示
※注意点
・子のmethods内で、プロパティを呼び出す場合は「this」をつける。
┗ this.$emit('受け渡すメソッド名', 変数)
┗ this.プロパティ名
実例
<template>
<div>
<v-col
cols="12"
sm="3">
<!--①v-modelを設定-->
v-model="text"
<!--③changeイベントを設定-->
@change="applyChanges" />
</v-col>
</div>
</template>
<script>
export default {
data(){
return{
//②v-model用の変数を定義
text: "初期値"
}
},
methods:{
//④methodsオプションで発信処理を定義
applyChanges(){
//データを変数で渡すため変数を定義
const text = this.text
//第1引数でイベント名、第2引数で変数を渡す
this.$emit('childChange', text)
}
}
}
</script>
<template>
<v-app>
<TextField
<!--⑤受け取ったイベント名を属性で定義し親のイベントに引き継ぐ-->
@childChange="parentChange"
/>
<p>
<!--⑧受け取ったデータを画面上に表示-->
・v-modelのデータ: {{text}}
</p>
</v-app>
</template>
<script>
import TextField from "./TextField"
export default {
name: "Parent",
components:{
TextField
},
data(){
return{
//⑦受け取ったデータをいれる変数を定義
//子の初期値と合わせるため同じ値をいれる
text:'初期値'
}
},
methods:{
//⑥methodsオプションで処理を定義
parentChange(text){
this.text = text
console.log("text-filedが変更されました")
}
}
}
</script>
実施結果
▼画面入力後
v-modelで変更した値が適用されている。
親側で定義したメソッドも発火している。
ただし、上記いずれの例も、changeイベントでmethodを発火させるため、変更を確定(Enter)しないと反映されない。
入力内容を即時反映したい場合はwatchプロパティを使う。
Author And Source
この問題について(Vue入力値変更と変化の検出 & 子から親にデータを渡す方法(v-model、@change)), 我々は、より多くの情報をここで見つけました https://qiita.com/shizen-shin/items/64950fe4bad21671e0b1著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .