首页 > 其他分享 >v-model 用法详解

v-model 用法详解

时间:2023-08-01 18:22:30浏览次数:28  
标签:currentValue val value 用法 详解 组件 input model

基础用法

v-model是vue的一个基础指令,用于表单的双向数据绑定

<input v-model="message" placeholder="edit me">
<p>Message is: {{ message }}</p>

v-model原理

一个组件上的 v-model 默认会利用名为 value 的 prop 和名为 input 的事件

<input v-model="searchText" />

<!-- 等价于 -->

<input
  :value="searchText"
  @input="searchText = $event.target.value"
/>

组件封装

接下来介绍如何使用v-model封装组件

index.vue

<my-select v-model="mySelectVal"></my-select>

<!-- 等价于 -->
<my-select :value="mySelectVal" @input="mySelectVal= $event.target.value"></my-select>

<script>
import MySelect from './components/MySelect.vue'
export default {
  name: '',
  components: {
    MySelect
  },
  data() {
    return {
      mySelectVal: ''
    }
  }
}
</script>

封装一个mySearch组件,使用v-model绑定mySelectVal

MySelect.vue

<template>
  <div class="wrapper">
    <el-select v-model="currentValue" placeholder="请选择">
      <el-option
        v-for="item in options"
        :key="item.value"
        :label="item.label"
        :value="item.value"
      >
      </el-option>
    </el-select>
  </div>
</template>

<script>
export default {
  name: '',
  props: {
    value: {
      type: String,
      default: ''
    }
  },
  data() {
    return {
      currentValue: '',
      options: [
        {
          value: '1',
          label: '黄金糕'
        },
        {
          value: '2',
          label: '双皮奶'
        }
      ]
    }
  },
  watch: {
    value: {
      handler(val) {
        console.log('父组件的value值 ---> ' + val)
        this.currentValue = val
      },
      immediate: true,
      deep: true
    },
    currentValue(val) {
      this.$emit('input', val)
    }
  }
}
</script>

1、子组件通过value接收父组件传过来的mySelectVal,通过watch将值赋给当前组件的currentValue;

2、当select选择时,子组件currentValue值发生改变后会触发this.$emit('input', val),此时触发父组件的@input,mySelectVal值会得到更新;

3、父组件通过v-model绑定一个属性,在子组件选择后,父组件可以直接拿到子组件选择的结果,实现了my-select组件的简单封装。

标签:currentValue,val,value,用法,详解,组件,input,model
From: https://www.cnblogs.com/meer/p/17598700.html

相关文章

  • CronExpression 表达式详解
    参数名有效值Seconds(秒)可以用数字0~59表示Minutes(分)可以用数字0~59表示Hours(时)可以用数字0~23表示Day-of-Month(日)可以用数字1~31中的任一个值,但要注意一些特别的月份Month(月)可以用0~11或用字符串JAN,FEB,MAR,APR,MAY,JUN,JU......
  • v-model的副作用
    如果v-model绑定的是响应式对象上某个不存在的属性,那么vue会悄悄的增加这个属性,并让他响应式。响应式数据中没有定义 user.tel 属性,但是 template 里却用 v-model 绑定了 user.tel,当你输入时会发生什么?答案:user 上会新增 tel 属性,并且 tel 这个属性还是响应式的......
  • vue3之父组件中封了子组件的抽屉(弹框类),通过update:modelValue来进行父子组件的v-mod
    eg:父组件a.vue<AddAiDrawer:projectId="route.query.id"v-model="addAiShow"title="新增"type="spaceAi"@call-back-table="refreshTa......
  • Spring集成Quartz定时任务框架介绍和Cron表达式详解
    在JavaEE系统中,我们会经常用到定时任务,比如每天凌晨生成前天报表,每一小时生成汇总数据等等。我们可以使用java.util.Timer结合java.util.TimerTask来完成这项工作,但时调度控制非常不方便,并且我们需要大量的代码。使用Quartz框架无疑是非常好的选择,并且与Spring可以非常方便的集成,下......
  • Android SDK离线安装方法详解(加速安装)
    AndroidSDK在国内下载一直很慢··有时候通宵都下不了一点点,最后只有选择离线安装,现在发出离线安装地址和方法,希望对大家有帮助一,首先下载SDK的安装包,android-sdk_r10-windows.zip(安装工具)解压到目录,如我的目录D:\programs\android-sdk-windows下载地址:http://dl.google.com/andro......
  • A Novel Noise Injection-based Training Scheme for Better Model Robustness
    郑重声明:原文参见标题,如有侵权,请联系作者,将会撤销发布!https://arxiv.org/abs/2302.10802......
  • Python-10-Python常见高级用法
    10-1Lambda匿名函数匿名函数:没有定义函数的名称,可以实现函数某些简单的功能。格式:lambdaparam_list:expression#param_list参数列表#expression简单表达式,没法实现复杂的代码块内容需求1:传入xy,返回x+y例子:f=lambdax,y:x+yf(3,4)#7lambda与向量表达式......
  • 格式化输出\pset命令详解
    语法"\pset"命令的语法如下:\pset[option[value]]postgres@linuxpg51:5432=#\psetborder1columns0csv_fieldsep','expandedofffieldsep'|'fieldsep......
  • urllib3高级用法
    除了基本的HTTP请求和响应处理功能,urllib3还提供了一些高级用法,包括: 1.连接池管理:urllib3使用连接池管理HTTP连接,可以提高性能和效率。可以使用`urllib3.PoolManager`类创建连接池,例如: ``` http=urllib3.PoolManager() response=http.request('GET','http://www......
  • requests-html高级用法
    以下是一些Requests-HTML的高级用法: 1.使用`Session()`对象: 如果要保持会话状态并在多个请求之间共享Cookie和其他信息,可以使用`Session()`对象: ``` session=HTMLSession() r=session.get('https://www.example.com') #dosomething r=session.get('......