首页 > 其他分享 >Vue — v-model详解

Vue — v-model详解

时间:2024-03-11 14:57:47浏览次数:32  
标签:Vue name value methods 详解 组件 model BaseSelect

一、v-model原理

原理:v-model本质上是一个语法糖。例如在inpu中,就是value属性input事件的合写

作用:提供数据的双向绑定

双向绑定:数据变,视图跟着变;视图变,数据跟着变

二、表单类组件封装&v-model简化代码

1.表单组件封装的核心思路:

(1)父传子 : 数据从父组件使用prop传递给子组件渲染,子组件使用v-model拆解绑定数据

(2)子传父:监听输入方法,子传父传值给父组件修改

<template>
  <div class="app">
    <BaseSelect :cityId="selectId" @changeSelect="selectId = $event"></BaseSelect>
  </div>
</template>

<script>
import BaseSelect from './components/BaseSelect.vue';

export default {
  name: 'App',
  components: {
    BaseSelect
  },
  data(){
    return {
      selectId : '103'
    }
  },
  methods : {
    
  }
}
</script>

<style>

</style>
<template>
  <div>

    <select :value="cityId" @change="changeCity">
        <option v-for="item in list" :key="item.value" :value="item.value">
            {{ item.name }}
        </option>
    </select>

  </div>
</template>

<script>
export default {
    props : {
        cityId : String
    },
    data(){
        return {
            list : [
                {
                    value : '101',
                    name : '北京'
                },
                {
                    value : '102',
                    name : '上海'
                },
                {
                    value : '103',
                    name : '南京'
                },
                {
                    value : '104',
                    name : '广州'
                }
            ]
        }
    },
    methods : {
        changeCity(e){
            // console.log(e)
            this.$emit('changeSelect',e.target.value)
        }
    }
}
</script>

<style>

</style>

2.简化代码

(1)子组件:prop通过value接收,事件触发使用@input

(2)父组件:v-model直接绑定数据

<template>
  <div class="app">
    <!-- v-model == :value + @input -->
    <BaseSelect v-model="selectId"></BaseSelect>
  </div>
</template>

<script>
import BaseSelect from './components/BaseSelect.vue';

export default {
  name: 'App',
  components: {
    BaseSelect
  },
  data(){
    return {
      selectId : '103'
    }
  },
  methods : {
    
  }
}
</script>

<style>

</style>
<template>
  <div>

    <select :value="value" @change="changeCity">
        <option v-for="item in list" :key="item.value" :value="item.value">
            {{ item.name }}
        </option>
    </select>

  </div>
</template>

<script>
export default {
    props : {
        value : String
    },
    data(){
        return {
            list : [
                {
                    value : '101',
                    name : '北京'
                },
                {
                    value : '102',
                    name : '上海'
                },
                {
                    value : '103',
                    name : '南京'
                },
                {
                    value : '104',
                    name : '广州'
                }
            ]
        }
    },
    methods : {
        changeCity(e){
            // console.log(e)
            this.$emit('input',e.target.value)
        }
    }
}
</script>

<style>

</style>

 

标签:Vue,name,value,methods,详解,组件,model,BaseSelect
From: https://www.cnblogs.com/qinlinkun/p/18066068

相关文章

  • JeecgBoot Vue3前端项目性能优化&按需加载方案
    JeecgBootvue3前端项目在3.5.5版本之前,的确存在很严重的性能问题,大家可以参考以下文档进行升级。按需加载改造方法1、全局注册地方去掉2、组件改成异步注册3、用不到的大组件可以删掉【精简项目方案】大组件1、富文本tinyme2、Markdown3、CodeMirror4、地图数据......
  • Vue-手动清空Form表单的验证及验证提示(红字提示)
    问题:form表单清空校验,使用系统方法clearValidate和resetFields这两个方法清空校验的时候,无法清除。解决办法:在this.$nextTick这个方法里边调用clearValidate/resetFields这两个方法。this.$nextTick(function(){this.$refs.formRefs.clearValidate();})由于DOM......
  • 选主板必须要懂芯片组:一文详解芯片组
    游戏玩家都知道主板的芯片组决定了主板能够兼容哪种CPU,但是芯片组到底说的是什么,可能很多萌新还是摸不着头脑,下面咱们就来聊一聊主板的芯片组。芯片组(Chipset)是主板的核心组成部分,作用是协调CPU、内存、硬盘等各种硬件之间的交流与合作,是CPU与周边设备沟通的桥梁。芯片组是由一......
  • Vue — 组件通信
    一、父传子<!--1.父组件:给子组件用添加属性的方式来传值--><Son:msg="msg":arr="arr"></Son>//2.子组件:子组件通过props来接收props:['msg','arr']关于prop1.什么是prop(1)定义:组件上定义的一些自定义属性(2)作用:向子组件传递数据(3)特点:可以传任意......
  • vue父子组件传参后,子组件重新初始化
    首先回顾一下父子组件生命周期的执行顺序:加载渲染过程:父beforeCreate ---> 父created ---> 父beforeMount ---> 子beforeCreate ---> 子created ---> 子beforeMount ---> 子mounted ---> 父mounted 子组件更新过程:父beforeUpdate ---> 子beforeUpdate--->......
  • vue3 监听鼠标点击拖动事件,移动端滑动事件,页面指针坐标事件
    PointerEventsAPI是Hmtl5的事件规范之一,它主要目的是用来将鼠标(Mouse)、触摸(touch)和触控笔(pen)三种事件整合为统一的API。Pointer指可以在屏幕上反馈一个指定坐标的输入设备。PointerEvent事件和TouchEventAPI对应的触摸事件类似,它继承扩展了TouchEvent,因此拥有TouchEven......
  • Unity3D中刚体、碰撞组件、物理组件的区别详解
    Unity3D提供了丰富的功能和组件,其中包括刚体、碰撞组件和物理组件。这些组件在游戏开发中起着非常重要的作用,能够让游戏世界更加真实和有趣。本文将详细介绍这三种组件的区别以及如何在Unity3D中实现它们。对啦!这里有个游戏开发交流小组里面聚集了一帮热爱学习游戏的零基础小白,也......
  • Unity3D Shader事项法线贴图功能详解
    Unity3D它提供了丰富的功能和工具,使开发人员能够轻松创建出色的游戏和应用程序。其中Shader是Unity3D中非常重要的一部分,它可以帮助开发人员实现各种视觉效果,包括法线贴图功能。对啦!这里有个游戏开发交流小组里面聚集了一帮热爱学习游戏的零基础小白,也有一些正在从事游戏开发的技......
  • 基于vue+springboot高校宿舍管理系统
    本项目是一款基于springBoot的高校宿舍管理系统。本系统主要功能包含:(1)基本信息管理基本信息分为学生信息和宿舍信息两部分,其功能是负责维护这些信息,对它们进行增删查改等操作。宿舍分配管理(2)根据给定的宿舍信息与学生信息,按照一定的规则自动地给还未分配宿舍的学生分配宿舍,......
  • Vue学习笔记42--ref
    Vue==>refref属性被用来给元素或子组件注册引用信息(id的替代者)应用在html标签上获取的是真实的DOM元素,应用在组件标签上是组件实例对象(vc)使用方式:声明标识:<h1ref="xxx">。。。。。。</h1>或<Schoolref="xxx"></School>——School为组件获取方式:this.$refs.xxx......