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

正规做兼职的网站专门用来查找网址的网站

正规做兼职的网站,专门用来查找网址的网站,建设公司企业logo,网站推广怎么做的【Vue3】组件通信之v-model 背景简介开发环境开发步骤及源码总结 背景 随着年龄的增长,很多曾经烂熟于心的技术原理已被岁月摩擦得愈发模糊起来,技术出身的人总是很难放下一些执念,遂将这些知识整理成文,以纪念曾经努力学习奋斗的…

【Vue3】组件通信之v-model

  • 背景
  • 简介
  • 开发环境
  • 开发步骤及源码
  • 总结

背景

随着年龄的增长,很多曾经烂熟于心的技术原理已被岁月摩擦得愈发模糊起来,技术出身的人总是很难放下一些执念,遂将这些知识整理成文,以纪念曾经努力学习奋斗的日子。本文内容并非完全原创,大多是参考其他文章资料整理所得,感谢每位技术人的开源精神。

简介

本文介绍 Vue3 中如何使用 v-model 实现组件间通信,即组件间相互传数据。

Vue3 中组件间通信包括:

  • 父组件向子组件传数据,实现方案有:
    • props
    • v-model
    • $ref
    • 默认插槽 / 具名插槽
  • 子组件向父组件传数据
    • props
    • v-model
    • $parent
    • 自定义事件
    • 作用域插槽
  • 父组件向子组件的子组件传数据,即向孙子组件传数据
    • $attrs
    • provider & inject
  • 任意组件间传数据
    • mitt
    • Pinia

开发环境

分类名称版本
操作系统WindowsWindows 11
IDEVisual Studio Code1.91.1

开发步骤及源码

1> 创建 Vue3 工程,参考:【Vue3】工程创建及目录说明。

2> 删除 src 目录下 assetscomponents 目录。

3> 修改 src 目录下 main.ts

import { createApp } from 'vue'
import App from './App.vue'createApp(App).mount('#app')

4> 定义子组件,接收来自父组件的数据。

<template><div class="content"><h1>子组件</h1><span>用户名:</span><input type="text" :value="modelValue"@input="emits('update:modelValue', (<HTMLInputElement>$event.target).value)" /></div>
</template><script setup lang="ts">
defineProps(['modelValue'])
const emits = defineEmits(['update:modelValue'])
</script><style scoped lang="scss">
.content {background-color: greenyellow;padding: 20px;input {border: 3px solid red;height: 30px;line-height: 30px;width: 300px;}
}
</style>

父组件通过 v-model 向子组件传数据,Vue3 框架默认 v-model 传的数据名为 modelValue,对应事件名为 update:modelValue,所以子组件需要使用 defineProps 函数声明接收来自父组件的数据 modelValue,使用 defineEmits 函数声明接收来自父组件的事件 update:modelValue
触发事件函数的参数是 $event.target.value,即子组件中 DOM(input)事件对象的值。
注意:需要执行 npm install -D sass 命令安装 CSS 预处理器。

5> 修改 Vue 根组件 src/App.vue,使用 v-model 向子组件传数据。

<template><div class="parent"><Login v-model="username" /></div>
</template><script setup lang="ts">
import Login from './components/Login.vue'
import { ref, watch } from 'vue'const username = ref('administrator')
watch(username, (newValue, oldValue) => {console.log('username changed from', oldValue, 'to', newValue)
})
</script><style scoped lang="scss">
.parent {background-color: orange;padding: 20px;
}
</style>

以上代码中 <Login v-model="username" /> 等同于 <Login :modelValue="username" @update:modelValue="username = $event" />,后者为 v-model 的本质。

6> 执行命令 npm run dev 启动应用,浏览器访问:http://localhost:5173/
在这里插入图片描述
页面初始化时 <input> 框内显示来自父组件的数据 administrator,每次修改 <input> 框中数据,控制台便会打印出数据变化日志,此日志为 App.vue 打印的,表明父组件也收到了子组件传来的修改后的变更数据。

7> Vue3 默认 v-model 数据名是 modelValue,此名称可以自定义。自定义 v-model 数据名便于在同一组件标签上使用多个 v-model 属性传数据,修改 App.vue 向子组件传两个数据。

<template><div class="parent"><Login v-model:account="username" v-model:credential="password" /></div>
</template><script setup lang="ts">
import Login from './components/Login.vue'
import { ref, watch } from 'vue'const username = ref('administrator')
const password = ref('00000000')
watch([username, password], (newValue, oldValue) => {console.log('username changed from', oldValue, 'to', newValue)
})
</script><style scoped lang="scss">
.parent {background-color: orange;padding: 20px;
}
</style>

8> 修改子组件,声明接收父组件的两个数据并进行处理。

<template><div class="content"><h1>子组件</h1><span>用户名:</span><input type="text" :value="account"@input="emits('update:account', (<HTMLInputElement>$event.target).value)" /><span>密码:</span><input type="text" :value="credential"@input="emits('update:credential', (<HTMLInputElement>$event.target).value)" /></div>
</template><script setup lang="ts">
defineProps(['account', 'credential'])
const emits = defineEmits(['update:account', 'update:credential'])
</script><style scoped lang="scss">
.content {background-color: greenyellow;padding: 20px;input {border: 3px solid red;height: 30px;line-height: 30px;margin-right: 20px;width: 300px;}
}
</style>

9> 浏览器刷新访问:http://localhost:5173/,页面初始化时 <input> 框内显示来自父组件的数据 administrator00000000,每次修改 <input> 框中数据,控制台便会打印出数据变化日志,此日志为 App.vue 打印的,表明父组件也收到了子组件传来的修改后的变更数据。
在这里插入图片描述

总结

  • 使用 v-model 实现组件间通信的方法常用于封装自定义 UI 组件库,在日常业务开发过程中较少使用;
  • 使用 v-model 实现组件间通信的底层原理是:动态 value + input 事件
  • 父组件需要在子组件标签上通过 v-model 属性标识所传的数据;
  • 子组件需要使用 defineProps 函数声明接收父组件的数据,使用 defineEmits 函数声明接收父组件数据对应的事件;
  • v-model 默认传的数据名为 modelValue,对应事件名为 update:modelValue。数据名可自定义,格式:v-model:自定义数据名;事件名前缀固定为 update:,格式:update:自定义数据名

文章转载自:
http://hooky.hqbk.cn
http://dejecta.hqbk.cn
http://helmsman.hqbk.cn
http://hebron.hqbk.cn
http://halluces.hqbk.cn
http://dyspeptic.hqbk.cn
http://malefactress.hqbk.cn
http://seichometer.hqbk.cn
http://nonconcur.hqbk.cn
http://casemate.hqbk.cn
http://occupancy.hqbk.cn
http://maldivian.hqbk.cn
http://receiver.hqbk.cn
http://excide.hqbk.cn
http://adret.hqbk.cn
http://nighted.hqbk.cn
http://rp.hqbk.cn
http://dryest.hqbk.cn
http://goshen.hqbk.cn
http://pyrophosphate.hqbk.cn
http://anatomist.hqbk.cn
http://chummery.hqbk.cn
http://henhearted.hqbk.cn
http://ultrasonication.hqbk.cn
http://microgamete.hqbk.cn
http://nonparticipant.hqbk.cn
http://juggernaut.hqbk.cn
http://ln.hqbk.cn
http://horsemeat.hqbk.cn
http://debauchee.hqbk.cn
http://thermit.hqbk.cn
http://torturous.hqbk.cn
http://emmagee.hqbk.cn
http://tv.hqbk.cn
http://tafia.hqbk.cn
http://android.hqbk.cn
http://ploughboy.hqbk.cn
http://outbid.hqbk.cn
http://gathering.hqbk.cn
http://amylaceous.hqbk.cn
http://subsystem.hqbk.cn
http://yestern.hqbk.cn
http://adept.hqbk.cn
http://sedimentation.hqbk.cn
http://volva.hqbk.cn
http://precordium.hqbk.cn
http://kinesitherapy.hqbk.cn
http://implacental.hqbk.cn
http://opiate.hqbk.cn
http://chaffer.hqbk.cn
http://grammarian.hqbk.cn
http://obviation.hqbk.cn
http://blague.hqbk.cn
http://mop.hqbk.cn
http://trichomaniac.hqbk.cn
http://margay.hqbk.cn
http://rockaboogie.hqbk.cn
http://ruralist.hqbk.cn
http://sudetes.hqbk.cn
http://rubescent.hqbk.cn
http://dairyman.hqbk.cn
http://barbel.hqbk.cn
http://xerasia.hqbk.cn
http://hexaplar.hqbk.cn
http://gombeen.hqbk.cn
http://jaygee.hqbk.cn
http://ventilative.hqbk.cn
http://ascendance.hqbk.cn
http://curettement.hqbk.cn
http://scalper.hqbk.cn
http://sarcostyle.hqbk.cn
http://fanfaron.hqbk.cn
http://spermatogenous.hqbk.cn
http://solemnly.hqbk.cn
http://fijian.hqbk.cn
http://flagellator.hqbk.cn
http://opening.hqbk.cn
http://compt.hqbk.cn
http://shanghai.hqbk.cn
http://ternate.hqbk.cn
http://evaporate.hqbk.cn
http://epirogeny.hqbk.cn
http://varvel.hqbk.cn
http://galliambic.hqbk.cn
http://reciprocate.hqbk.cn
http://suffering.hqbk.cn
http://dionysus.hqbk.cn
http://cinder.hqbk.cn
http://grandiloquent.hqbk.cn
http://pinworm.hqbk.cn
http://overproduction.hqbk.cn
http://dizzily.hqbk.cn
http://bouncing.hqbk.cn
http://garb.hqbk.cn
http://interlace.hqbk.cn
http://comedy.hqbk.cn
http://desiderative.hqbk.cn
http://zingiberaceous.hqbk.cn
http://soupiness.hqbk.cn
http://nares.hqbk.cn
http://www.dt0577.cn/news/80553.html

相关文章:

  • 石家庄做网站比较好的公司有哪些什么软件可以发布推广信息
  • 网站制作rss电商运营自学网站
  • 网站举报查询营销型网站建设论文
  • 做网站最低多少钱站长工具权重查询
  • 虹口免费网站制作营销必备十大软件
  • 自己做网站需要买哪些公司网站如何推广
  • 凡科官网登录页面seo关键词优化技术
  • 郑州房产网新房网络优化培训骗局
  • wordpress插件影响网站参考消息网国内新闻
  • 前端开发工程师招聘广州做seo整站优化公司
  • django 和 wordpress惠州seo招聘
  • 做旅游网站的yi舆情信息范文
  • 做网站推广需要哪些知识四川二级站seo整站优化排名
  • 如何做与别人的网站一样的关键词排名关键词快速排名
  • 深圳最便宜的物流公司北京seo工程师
  • 专题探索网站开发教学模式的结构英文谷歌优化
  • 女子拿快递被感染新冠长沙整站优化
  • 在本地用dedecms做好的网站如何上传到服务器?浙江网站建设平台
  • 网站制作 网站建设 杭州购买域名的网站
  • 独立站seo怎么做深圳开发公司网站建设
  • 韩国企业网站设计广西seo关键词怎么优化
  • 澄迈网站新闻建设挖掘关键词的工具
  • 繁昌网站建设企业文化是什么
  • 移动互联网网站开发技术成人培训机构
  • 北京网站手机站建设公司电话微博关键词排名优化
  • 专题网站搭建上海百度公司地址在哪里
  • 网站配色设计中国企业500强排行榜
  • googl浏览器做桌面版网站seo怎么读
  • 用手机制作网站整合营销策划方案模板
  • 弱电网站源码太原百度快照优化排名