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

付网站建设费用 会计科目专业的集团网站开发

付网站建设费用 会计科目,专业的集团网站开发,优秀企业网站有哪些,专题页网站前言 随着 Vue3.4 版本的发布,defineModel 也正式转正了。它可以简化父子组件之间的双向绑定,是目前官方推荐的双向绑定实现方式。 defineModel 使用 在开发的过程中,如果有需要通过子组件进行状态更新的话,v-model是一个绕不开…

前言

随着 Vue3.4 版本的发布,defineModel 也正式转正了。它可以简化父子组件之间的双向绑定,是目前官方推荐的双向绑定实现方式。

defineModel 使用

在开发的过程中,如果有需要通过子组件进行状态更新的话,v-model是一个绕不开的点。以前的v-model是这样用的 👇

Vue3中得 v-model 默认解析成 :modelValue 与 @update:modelValue

<!-- Father.vue -->
<template><span>num:{{ num }}</span><hr /><Child v-model="num" />
</template><script lang="ts" setup>
import { ref } from 'vue'
import Child from './Child.vue'
const num = ref<number>(0)
</script>
<!-- Child.vue -->
<template>num: {{ modelValue }}<button @click="onClick">count</button>
</template><script lang="ts" setup>
const $props = defineProps<{ modelValue: number }>()
const $emits = defineEmits<{(e: 'update:modelValue', newCount: number): void// 注册update:modelValue事件,作为状态更新的回调
}>()
function onClick() {$emits('update:modelValue', $props.modelValue + 1)// 状态更新时发布事件
}
</script>

在有了defineModel之后,我们就可以在Child.vue中这样实现 👇

<!-- Child.vue -->
<template>num: {{ num }}<button @click="onClick">count</button>
</template><script lang="ts" setup>
// 一步到位,完成事件注册和监听状态变化并发布事件
const num = defineModel({ type: Number, default: 0 })
// 单个v-model绑定等价于如下
// const num = defineModel('modelValue', { type: Number, default: 0 })
function onClick() {num.value += 1
}
</script>

defineModel如何实现多个 v-model 绑定 👇

<!-- Father.vue -->
<template><span>num1: {{ num1 }}</span><span>num2: {{ num2 }}</span><hr /><Child v-model:num1="num1" v-model:num2="num2" />
</template><script lang="ts" setup>
import { ref } from 'vue'
import Child from './Child.vue'
const num1 = ref<number>(0)
const num2 = ref<number>(0)
</script>
<!-- Child.vue -->
<template>num1: {{ num1 }} num2: {{ num2 }}<button @click="onClick">+1</button>
</template><script lang="ts" setup>
const num1 = defineModel('num1', { type: Number, default: 20 })
const num2 = defineModel('num2', { type: Number, default: 20 })
// 一步到位,完成事件注册和监听状态变化并发布事件
function onClick() {num1.value += 1num2.value += 1
}
</script>

实现原理

<!-- Father.vue -->
<template><span>num:{{ num }}</span><hr /><Child v-model="num" />
</template><script lang="ts" setup>
import { ref } from 'vue'
import Child from './Child.vue'
const num = ref<number>(0)
</script>
<!-- Child.vue -->
<template>num: {{ num }}<button @click="onClick">count</button>
</template><script lang="ts" setup>
import { ref, watch } from 'vue'
const $props = defineProps<{ modelValue: number }>()
const $emits = defineEmits<{(e: 'update:modelValue', newCount: number): void
}>()const num = ref()watch(() => $props.modelValue,() => {num.value = $props.modelValue},{// 回调函数会在watch创建时立即执行一次immediate: true}
)
watch(num, () => {$emits('update:modelValue', num.value)
})function onClick() {num.value += 1
}
</script>

等同于如下

<!-- Child.vue -->
<template>num: {{ num }}<button @click="onClick">count</button>
</template><script lang="ts" setup>
const num = defineModel({ type: Number, default: 0 })function onClick() {num.value += 1
}
</script>
  • defineModel其实就是在子组件内定义了一个ref变量nummodelValue的props。

  • watch了props中的modelValue,watch创建时立即执行一次将props中的modelValue赋值给num。当props中的modelValue的值改变后会同步更新num变量的值。

  • watch了ref变量num,当在子组件内改变num变量的值后会抛出update:modelValue事件

  • 父组件收到这个事件后就会更新父组件中对应的变量值。

其实defineModel的源码中是使用 customRef 和 watchSyncEffect 去实现的,我这里是为了让大家能够更容易的明白defineModel的实现原理才举的refwatch的例子。

http://www.yayakq.cn/news/446852/

相关文章:

  • 中元建设网站简历表格 个人简历电子版
  • 做网站用什么技术网站备案号在哪儿查询
  • 怎样把一个网站建设的更好西宁休闲娱乐场所
  • 企业网站建立哪定制版网站建设详细报价
  • 罗湖附近公司做网站建设茶叶网站建设费用明细
  • 交友类网站功能建设思路wordpress与商城
  • 网站做三方登陆需要注册公司不企业团建公司
  • 本地化网站建设40平小商铺装修
  • 表白视频制作网站响应式网站缺点
  • 安庆网站建设aqwzjswordpress主题lightsns
  • 广州企业网站马鞍山网站建设设计
  • 柳州做网站哪家好网页制作公司 软件
  • 相亲网站拉人做基金个人秀网站
  • 网站内容管理平台潍坊网站托管
  • 台前网站建设公司wordpress首页显示一张图片不显示
  • 兰州网站建设哪家专业球迷类的网站如何做
  • 做seo 教你如何选择网站关键词微信发表wordpress
  • 供求信息网站建设报价做外贸网站要花多少钱
  • 公司怎么注册官方网站网站安全的建设目标
  • 网站后台登录地址怎么安全微网站欣赏
  • 建设网站个人银行相亲网站
  • 怎样建设一个游戏网站html可视化布局工具
  • 专业的河南网站建设公司50篇经典软文100字
  • 产品类网站模板芜湖网站建设电话
  • 网站名称 规则qq小程序在哪里打开
  • 齐河网站建设公司如何制作app图标
  • 对公司网站建设的建议微信公众号怎么上架商品
  • 做同城信息网站怎么赚钱网站建设行业 前景
  • 长春做网站哪个公司好杨凌网站开发
  • 伊春住房和城乡建设局网站站开发技术培训