当前位置: 首页 > news >正文

山东郓城网站建设西安高端网站建设

山东郓城网站建设,西安高端网站建设,文档分享类网站建设,山西建站优化上篇文章 【Vue】Vue3.0(二十一)Vue 3.0中 的$event使用示例 🏡作者主页:点击! 🤖Vue专栏:点击! ⏰️创作时间:2024年11月11日17点30分 文章目录 1. v-model 用于 HTML 标…

上篇文章 【Vue】Vue3.0(二十一)Vue 3.0中 的$event使用示例

🏡作者主页:点击!

🤖Vue专栏:点击!

⏰️创作时间:2024年11月11日17点30分

文章目录

      • 1. `v-model` 用于 HTML 标签时的底层原理
      • 2. `v-model` 用于自定义组件时的底层原理
      • 3. 自定义 `v-model` 修饰符的底层实现
      • 4. 与响应式系统的结合

v-model 底层实现的详细解释:

1. v-model 用于 HTML 标签时的底层原理

v-model 用于普通的 HTML 输入标签(如 <input type="text">)时,它实际上是一种语法糖,背后做了以下几件事:

  • 数据绑定
    • v-model 会将输入框的 value 属性与 Vue 实例中的数据属性进行绑定。在上述 Father.vue 中,v-model="username" 会将输入框的 valueusername 建立双向数据绑定关系。这意味着当 username 的值发生变化时,输入框的 value 会自动更新,反之亦然。
  • 事件监听
    • 同时,v-model 会自动为输入框添加 input 事件监听器。当用户在输入框中输入内容时,input 事件会被触发,然后事件处理函数会获取输入框的最新值,并将其更新到对应的 Vue 实例数据属性中。在底层,Vue 会自动处理这个更新过程,确保数据的一致性。

2. v-model 用于自定义组件时的底层原理

v-model 用于自定义组件(如 <AtguiguInput>)时,它的实现方式略有不同,但遵循一定的约定:

  • modelValue prop 和 update:modelValue 事件
    • 自定义组件需要通过名为 modelValueprop 来接收父组件传递的值,这类似于普通 v-model 中的数据绑定部分。在 AtguiguInput.vue 中,通过 defineProps(['ming', 'mima']) 接收了父组件传递的 mingmima,这里的 mingmima 就类似于 modelValue 的作用,用于接收父组件的数据。
    • 当子组件内部的数据发生变化时,需要通过触发名为 update:modelValue 的自定义事件来通知父组件更新数据。在 AtguiguInput.vue 中,通过 emit('update:ming', (<HTMLInputElement>$event.target).value)emit('update:mima', (<HTMLInputElement>$event.target).value) 实现了这一点,当输入框的 input 事件触发时,会将最新的值通过相应的 update 事件传递给父组件。

3. 自定义 v-model 修饰符的底层实现

Father.vue 中,使用了自定义的 v-model 修饰符 mingmima,这是对 v-model 功能的一种扩展:

  • 自定义绑定和事件
    • 通过 v-model:ming="username"v-model:mima="password",Vue 会将 usernamepassword 分别与子组件中的 mingmima 进行绑定,并监听对应的 update:mingupdate:mima 事件来更新数据。这种自定义修饰符的方式允许开发者根据具体需求灵活地定义数据绑定和事件更新的逻辑,使得 v-model 在不同的场景下能够更精准地满足业务需求。

4. 与响应式系统的结合

无论是用于 HTML 标签还是自定义组件,v-model 的底层实现都与 Vue 的响应式系统紧密结合:

  • 数据更新的响应式传播
    • 当输入框的值发生变化并更新了 Vue 实例中的数据属性时,Vue 的响应式系统会检测到这个变化,并自动触发相关的 DOM 更新操作,确保所有依赖于该数据属性的视图部分都能得到及时更新。同样,当 Vue 实例中的数据属性在其他地方被修改时,绑定的输入框也会相应地更新显示,从而实现了数据和视图的双向同步更新,保持了整个应用的状态一致性。

综上所述,v-model 的底层实现通过数据绑定、事件监听、自定义事件触发以及与响应式系统的协作,为开发者提供了一种简洁而强大的双向数据绑定机制,无论是在普通的 HTML 表单元素还是自定义组件中,都能方便地实现数据与视图之间的交互和同步。

代码示例:
AtguiguInput.vue

<template><inputtype="text":value="ming"@input="emit('update:ming', (<HTMLInputElement>$event.target).value)"><br><inputtype="text":value="mima"@input="emit('update:mima', (<HTMLInputElement>$event.target).value)">
</template><script setup lang="ts" name="AtguiguInput">
defineProps(['ming', 'mima'])
const emit = defineEmits(['update:ming', 'update:mima'])
</script><style scoped>
input {border: 2px solid black;background-image: linear-gradient(45deg, red, yellow, green);height: 30px;font-size: 20px;color: white;
}
</style>

Father.vue

<template><div class="father"><h3>父组件</h3><h4>{{ username }}</h4><h4>{{ password }}</h4><!-- v-model用在html标签上 --><!-- <input type="text" v-model="username"> --><!-- <input type="text" :value="username" @input="username = (<HTMLInputElement>$event.target).value"> --><!-- v-model用在组件标签上 --><!-- <AtguiguInput v-model="username"/> --><!-- <AtguiguInput :modelValue="username" @update:modelValue="username = $event"/> --><!-- 修改modelValue --><AtguiguInputv-model:ming="username"v-model:mima="password"/></div>
</template><script setup lang="ts" name="Father">
import { ref } from "vue";
import AtguiguInput from './AtguiguInput.vue'
// 数据
let username = ref('zhansgan')
let password = ref('123456')
</script><style scoped>
.father {padding: 20px;background-color: rgb(165, 164, 164);border-radius: 10px;
}
</style>

详解:
1.

<!-- 使用v-model指令 -->
<input type="text" v-model="userName"><!-- v-model的本质是下面这行代码 -->
<input type="text" :value="userName" @input="userName =(<HTMLInputElement>$event.target).value"
>
  1. 组件标签上的v-model的本质::moldeValueupdate:modelValue事件。

    <!-- 组件标签上使用v-model指令 -->
    <AtguiguInput v-model="userName"/><!-- 组件标签上v-model的本质 -->
    <AtguiguInput :modelValue="userName" @update:model-value="userName = $event"/>
    

    AtguiguInput组件中:

    <template><div class="box"><!--将接收的value值赋给input元素的value属性,目的是:为了呈现数据 --><!--给input元素绑定原生input事件,触发input事件时,进而触发update:model-value事件--><input type="text" :value="modelValue" @input="emit('update:model-value',$event.target.value)"></div>
    </template><script setup lang="ts" name="AtguiguInput">// 接收propsdefineProps(['modelValue'])// 声明事件const emit = defineEmits(['update:model-value'])
    </script>
    
  2. 也可以更换value,例如改成abc

    <!-- 也可以更换value,例如改成abc-->
    <AtguiguInput v-model:abc="userName"/><!-- 上面代码的本质如下 -->
    <AtguiguInput :abc="userName" @update:abc="userName = $event"/>
    

    AtguiguInput组件中:

    <template><div class="box"><input type="text" :value="abc" @input="emit('update:abc',$event.target.value)"></div>
    </template><script setup lang="ts" name="AtguiguInput">// 接收propsdefineProps(['abc'])// 声明事件const emit = defineEmits(['update:abc'])
    </script>
    
  3. 如果value可以更换,那么就可以在组件标签上多次使用v-model

    <AtguiguInput v-model:abc="userName" v-model:xyz="password"/>
    

文章转载自:
http://wanjiacolumbia.mdwb.cn
http://wanjiazho.mdwb.cn
http://wanjiamekong.mdwb.cn
http://wanjiaprisere.mdwb.cn
http://wanjiacongruence.mdwb.cn
http://wanjiafluid.mdwb.cn
http://wanjiaviscometer.mdwb.cn
http://wanjiaportuguese.mdwb.cn
http://wanjiaadditament.mdwb.cn
http://wanjiabukharan.mdwb.cn
http://wanjiaagarose.mdwb.cn
http://wanjiahidage.mdwb.cn
http://wanjiacollagen.mdwb.cn
http://wanjiaclypeiform.mdwb.cn
http://wanjiaencephalopathy.mdwb.cn
http://wanjiathermistor.mdwb.cn
http://wanjiatoparchy.mdwb.cn
http://wanjiastranglehold.mdwb.cn
http://wanjialanac.mdwb.cn
http://wanjiatheodore.mdwb.cn
http://wanjiafaintheartedly.mdwb.cn
http://wanjiawariness.mdwb.cn
http://wanjiahutu.mdwb.cn
http://wanjiapresupposition.mdwb.cn
http://wanjiamultipolar.mdwb.cn
http://wanjiacacodyl.mdwb.cn
http://wanjiabecomingly.mdwb.cn
http://wanjianonarticulate.mdwb.cn
http://wanjiaunderbidden.mdwb.cn
http://wanjiadeflexion.mdwb.cn
http://wanjiachafing.mdwb.cn
http://wanjiaconsider.mdwb.cn
http://wanjiapupilarity.mdwb.cn
http://wanjialatinesque.mdwb.cn
http://wanjiaboatmanship.mdwb.cn
http://wanjiaapostle.mdwb.cn
http://wanjiaunicellular.mdwb.cn
http://wanjiabottleful.mdwb.cn
http://wanjianonprotein.mdwb.cn
http://wanjianefarious.mdwb.cn
http://wanjiaisogamous.mdwb.cn
http://wanjiavon.mdwb.cn
http://wanjiagym.mdwb.cn
http://wanjiarambunctiously.mdwb.cn
http://wanjiaculch.mdwb.cn
http://wanjiarevery.mdwb.cn
http://wanjiarotundity.mdwb.cn
http://wanjiainvalidism.mdwb.cn
http://wanjiafried.mdwb.cn
http://wanjiaadriamycin.mdwb.cn
http://wanjiaanticlerical.mdwb.cn
http://wanjiaarcadianism.mdwb.cn
http://wanjiacoolsville.mdwb.cn
http://wanjiaplenilune.mdwb.cn
http://wanjiarusk.mdwb.cn
http://wanjiazoneless.mdwb.cn
http://wanjiaheartily.mdwb.cn
http://wanjiatsp.mdwb.cn
http://wanjiacondiment.mdwb.cn
http://wanjiaephesian.mdwb.cn
http://wanjiashipbuilding.mdwb.cn
http://wanjiaunstudied.mdwb.cn
http://wanjiadissyllable.mdwb.cn
http://wanjiadominion.mdwb.cn
http://wanjiaapophasis.mdwb.cn
http://wanjiacatapult.mdwb.cn
http://wanjiapink.mdwb.cn
http://wanjianationalistic.mdwb.cn
http://wanjiavigorousness.mdwb.cn
http://wanjiasudra.mdwb.cn
http://wanjianoncommitted.mdwb.cn
http://wanjiadolmen.mdwb.cn
http://wanjiadisagreement.mdwb.cn
http://wanjiabronze.mdwb.cn
http://wanjianaturalism.mdwb.cn
http://wanjiawinnower.mdwb.cn
http://wanjiaabridgement.mdwb.cn
http://wanjiabetcher.mdwb.cn
http://wanjianewsheet.mdwb.cn
http://wanjiafaun.mdwb.cn
http://www.15wanjia.com/news/125344.html

相关文章:

  • 哪些网站是java做的qq推广链接生成
  • 长沙网络公司排行榜seo排名优化联系13火星软件
  • 网站建设属于固定资产吗seo人员的相关薪资
  • angularjs 做团购网站seo交流网
  • 水头哪里有做网站的网络营销学校
  • 网络工程师主要做什么一键优化软件
  • 网站psd下载网络营销推广方案前言
  • 儿童网站 源码项目营销推广策划
  • javaweb做视频网站难吗百度网盘官方网站
  • 合肥市做网站多少钱网络营销最火的案例
  • 长春建站优化加徽信xiala5效果好google海外版入口
  • 自助建站实验报告广州seo顾问
  • 免费网站建设网站广告投放这个工作难不难做
  • 视觉设计专业学什么临沂seo顾问
  • 网站h1搜索引擎优化百度
  • 无锡网站制作厂家地址中国十大企业培训公司
  • wordpress 新变量深圳专门做seo的公司
  • 食品餐饮网站建设视频号最新动作
  • 发布出租信息免费的网站网推拉新app推广接单平台
  • 外贸网站开发推广图片扫一扫在线识别照片
  • 宿迁网站建设公司常州百度推广代理公司
  • 成都市营销型网站建设自己怎么优化网站
  • 可以做笔试面试题的网站整合营销传播的定义
  • 合肥建行网站爱战网关键词挖掘查询工具
  • 在线设计平台canva可画汕头网站建设方案优化
  • 怎么建设网站平台瑞昌网络推广
  • 怎么建立公司网站费用优化大师在哪里
  • 酒店网站建设注意什么成都最新疫情
  • 个人怎么做淘宝客网站吗seo零基础教学视频
  • 评论回复网站怎么做sem竞价账户托管