包含表单域标签的组件应用v-model

58 篇文章 2 订阅

组件应用v-model

v-model指令的使用:

  1. 表单域标签中可以使用
  2. 在普通的组件中也可以使用(该组件确定要包含表单域标签)

组件上使用v-model官网详情

1. 在普通表单域标签中使用v-model

v-model实现的简易原理

v-model就是 value属性 和 oninput事件的结合,
oninput事件:输入框有输入动作就触发,
通过value和oninput事件,使得输入框也有双向绑定效果。

<template>
    <div>
      <p>{{city}}</p>
      <div>v-model实现双向绑定效果:<input type="text" v-model="city"/></div>
      <p>value/oninput事件结合实现双向绑定效果:
        <input type="text" :value="city" @input="city=$event.target.value"></p>
      	<input type="text" :value="city" @input="(data)=>{city=data}"></p>
    </div>
</template>

<script>
export default {
  name: 'App',
  data () {
    return {
      city: '北京'
    }
  }
}
</script>

2. 组件标签应用v-model

  • 父组件标签应用v-model,本质就是value属性 和 @input事件的结合。
  • 子组件通过props接收value值,应用value,就是在使用父组件v-model的成员。
  • 子组件表单域的数据发生变化,如果这个数据还要传给父组件的v-model,那么就设置 @input="$emit('input',\$event.target.value)"

父组件

<!-- App.vue  充当父组件-->
<template>
    <div>
      <p>父组件的city:{{city}}</p>
      <!-- 应用输入框子组件 -->
      <com-input v-model="city"></com-input>
      <!--
        v-model就是value属性 和 oninput事件的结合
        :value="city" 就是父组件给子组件传递的数据(属性值传值)
        @input事件:可以对本身的value属性做修改(city)
        @input事件两种设置方式:
        1. 简单语句
        2. 箭头函数,好处是可以接收其他应用传递的数据
      -->
      <!-- <com-input :value="city" @input="(data)=>{city=data}"></com-input> -->
      <!-- <com-input :value="city" @input="city=$event.target.value"></com-input> -->
    </div>
</template>

<script>
// 对ComInput做 导入、注册、使用
// 给子组件配置v-model
import ComInput from './components/ComInput.vue'
export default {
  name: 'App',
  components: {
    ComInput
  },
  data () {
    return {
      city: 'tom'
    }
  },
}
</script>

子组件

<!-- 创建一个输入框的业务组件(子组件) -->
<template>
    <div>
      <!-- 如下输入框value发生变化,父组件v-model要感知到
        @input事件:可以感知输入框内容发生变化
        $event:在Vue中固定,代表事件对象
        $event.target:操作目标的dom对象,就是input框对象
        $event.target.value:代表当前输入框已经输入好的信息,就是value属性的内容
        对当前组件的oninput事件做调用
      -->
      用户名:<input
                type="text"
                :value="value"
                @input="$emit('input',$event.target.value)">
    </div>
</template>

<script>
// 对父组件设置的v-model的数据信息做接收使用
export default {
  name: 'com-input',
  // 接收父组件传递过来的信息props
  props: ['value']
}
</script>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值