v-model原理

这篇具有很好参考价值的文章主要介绍了v-model原理。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

v-model既可以作用于表单元素,也可以作用于自定义组件。无论哪种情况,它都是一个语法糖,最终会生成一个属性和事件。

当作用于表单元素视时,vue会根据作用于表单元素类型而生成合适的属性和事件。例如:
1、作用于普通文本框时,会生成value属性和input事件;
2、当其作用于单选框or多选框时,会生成checked属性和change事件。
3、v-model也可以作用于自定义组件,当作用于自定义组件时,默认生成vlalue属性和input事件。
(注:开发者也可以通过组件的model配置来改变生成的属性和事件、)。

v-model的原理简单描述

一、表单元素

v-model主要提供了两个功能,view层输入值影响data的属性值,data属性值发生改变会更新view层的数值变化。以下以input控制绑定v-model举例说明。

<!DOCTYPE html>
<html lang="en">
<head>
   <meta charset="UTF-8">
</head>
<body>
   <div id="app">
       <p>{{name}}</p>
       <input type="text" v-model="name" />
   </div>
</body>
</html>

input 输入值后更新data

首先在页面初始化时候,vue的编译器会编译该html模板文件,将页面上的dom元素遍历生成一个虚拟的dom树。再递归遍历虚拟的dom的每一个节点。当匹配到其是一个元素而非纯文本,则继续遍历每一个属性。
  如果遍历到v-model这个属性,则会为这个节点添加一个input事件,当监听从页面输入值的时候,来更新vue实例中的data想对应的属性值。

    // 假如node是遍历到的input节点
    node.addEventListener("input",function(e){
        vm.name=e.target.value;
    })  

data的属性赋值后更新input的值。

    Object.defineProperty(data,"name",{
        get(){
            return data["name"];
        },
        set(newVal){
            let val=data["name"];
            if (val===newVal){
                return;
            }
            data["name"]=newVal;
            // 监听到了属性值的变化,假如node是其对应的input节点
            node.value=newVal;
        }    
    })

总结:
其核心就是,一方面modal层通过defineProperty来劫持每个属性,一旦监听到变化通过相关的页面元素更新。另一方面通过编译模板文件,为控件的v-model绑定input事件,从而页面输入能实时更新相关data属性值。

二、自定义组件

父:

<Child v-model="myData"></Child>

子:

<template>
  <div>
    <button @click="handleClick(value-1)">减少</button>
    <input type="text"  v-model='value'>
  <button @click="handleClick(value+1)">添加</button>
  </div>
</template>

<script>
export default {
props:{
    value:{
        type:Number,
        default:0,
    }
},
methods:{
    handleClick(newValue){
        this.$emit('input',newValue);
    }
}
}
</script>

v-model原理,前端,js,vue,vue.js,前端,javascript文章来源地址https://www.toymoban.com/news/detail-816705.html

到了这里,关于v-model原理的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • v-model的原理

    v-model 是 Vue.js 框架中的一个重要指令,用于实现双向数据绑定。它是一个语法糖,等效于使用 :value 和 @input 事件的组合。v-model 的工作原理可以分为以下步骤:首先,Vue 创建一个代理对象,其中包含了数据属性,例如 message。初始时,表单元素的值会被设置为数据属性的当前

    2024年02月08日
    浏览(36)
  • vue v-model例子

    code 11

    2024年02月10日
    浏览(43)
  • Vue v-model 详解

    在当今Web开发领域中,构建交互性强、可复用且易于维护的用户界面是至关重要的。而Vue.js作为一款现代化且流行的JavaScript框架,正是为了满足这些需求而诞生。它采用了MVVM架构模式,并通过数据驱动和组件化的方式,使我们能够更轻松地构建出优雅而高效的Web应用程序。

    2024年01月21日
    浏览(33)
  • 【Vue】双向绑定 v-model

    2024年01月22日
    浏览(40)
  • 详解vue中的v-model

    序:v-model是 v-bind 和 v-on:input 的结合,即监听了表单的input事件,然后修改value属性对应的值 一、vue单文件中使用v-model 众所周知,当我们使用v-bind绑定prop时,数据流的流向是从model层流向view层,被v-bind绑定的prop会从data中读取属性值; 那么如何实现既能让数据从model层流向

    2024年02月16日
    浏览(33)
  • 【前端】for循环中 使用 v-model:value 导致引用重复

    如果您在循环中使用 v-model:value 导致引用重复的问题,通常是因为 Vue.js 会生成相同的 v-model 绑定,导致引用冲突。为了解决这个问题,您可以采取以下一些方法之一: 使用唯一的属性名: 在循环中,确保每个 v-model:value 绑定都使用不同的属性名,以防止引用重复。例如,您

    2024年02月09日
    浏览(33)
  • vue v-model的详细介绍

    v-model是什么? v-model 是Vue框架的一种内置的API指令,本质是一种语法糖写法。它负责监听用户的输入事件以更新数据,并对一些极端场景进行一些特殊处理 为什么使用v-model? v-model指令可以在表单input、textarea以及select元素上创建双向数据绑定它会根据控件类型自动选取正确

    2024年02月03日
    浏览(32)
  • vue父子组件传值(v-model)

    子组件使用 props 接收父组件传来的值 1)这里有个大坑, el-dialog 中一定要用 model-value 来代替 v-model ,不能用 v-model ,否则会报错 (2)子组件中修改父组件传入的参数 visible 时,使用 👇方式

    2024年02月11日
    浏览(39)
  • Vue3:有关v-model的用法

    目录 前言: 回忆基本的原生用法: 原生input的封装: 自定义v-model参数: 对el-input的二次封装: 多个v-model进行绑定: v-model修饰符: v-model自定义参数与自定义修饰符的结合:         提起v-model,想必都不陌生,作为vue的经典语法,帮助我们在编写项目的时候,省了很多很多

    2024年02月05日
    浏览(35)
  • vue2 系列:自定义 v-model

    1. input 中的 v-model 2. 自定义组件 v-model

    2024年02月08日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包