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

律师做推广宣传的网站免费站长统计工具

律师做推广宣传的网站,免费站长统计工具,网站申请腾讯绿标认证,武汉专业做网站开发的公司【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://www.dt0577.cn/news/52507.html

相关文章:

  • 做网站需要那些东西长春网站优化
  • 安徽网站建设哪家好站长工具seo综合查询引流
  • 用ai做网站各个广告联盟的标识
  • 常熟网站制作设计网络营销到底是个啥
  • 建设部网站社保联网域名查询平台
  • 做网站域名选择百度渠道开户哪里找
  • 孟村网站建设价格澳门seo关键词排名
  • asp做网站优点软文一般发布在哪些平台
  • 做视频网站的条件苏州seo关键词优化软件
  • 移动电子商务网站建设研究互联网营销师证书是国家认可的吗
  • 郑州做网站哪个公司好seo黑帽教学网
  • 宜昌教育培训网站建设网站域名购买
  • 网站管理的内容网站免费进入窗口软件有哪些
  • 丹阳做网站的公司凡客建站
  • 做脚垫版型的网站风云榜百度
  • jsp商务网站建设比较好网站制作公司
  • 做暑假工的网站网络营销成功的原因
  • 创办网站的步骤app拉新推广平台
  • 立方集团 网站地推项目平台
  • 建设做网站沈阳seo收费
  • 网站制作 商务苏州百度代理公司
  • 房产网站建设方案自己创建网页
  • 网站开发思维导图网站收录查询
  • 网页制作软件2023网站seo哪家做的好
  • wordpress幻灯片怎么建优化网站首页
  • 做网站服务器配置应该怎么选西安网络优化哪家好
  • 福州交通建设集团官方网站网络优化报告
  • 微信营销要怎么做如何优化关键词
  • 台湾建设公司网站西安百度推广电话
  • 杭州富阳做网站百度下载链接