Vue3-新特性defineOptions和defineModel示例详解

 更新时间:2023年11月24日 16:56:57   作者:小沐°  
在Vue3.3中新引入了defineOptions宏主要是用来定义Option API的选项,可以用defineOptions定义任意的选项,props、emits、expose、slots除外,本文给大家介绍Vue3-新特性defineOptions和defineModel,感兴趣的朋友一起看看吧

defineOptions

问题:用了<script setup>后,就无法添加与其平级的属性了,比如定义组件的name或其他自定义的属性。

为了解决这一问题,引入了defineProps与defineEmits这两个宏,但这只解决了props与emits这两个属性。如果要定义其他的平级属性,还是得回到最原始的用法--就再添加一个普通的<script>标签。这样就会存在两个<script>标签,让人无法接受。

所以在Vue3.3中新引入了defineOptions宏。顾名思义,主要是用来定义Option API的选项。可以用defineOptions定义任意的选项,props、emits、expose、slots除外(因为这些可以使用defineXXX来做到)

<script setup>
import { defineOptions } from 'vue'
defineOptions({
  name: 'Foo',//组件重命名
  inheritAttrs: false,
  //...更多自定义属性
})
</script>

defineModel

实验型,快速实现双向绑定,简化v-model

在Vue3中,自定义组件上使用v-model,相当于传递一个modelValue属性,同时触发update:modelValue事件

<Child v-model="isVisible">
//相当于
<Child :modelValue="isVisible" @update:modelValue="isVisible=$event">

我们需要先定义props,再定义emits。其中有许多重复的代码。如果需要修改此值,还需要手动调动emit函数

父组件:

<template>
  <inputModel v-model="txt"></inputModel>{{ txt }}
</template>
<script setup>
import inputModel from '@/components/inputModel.vue'
import { ref } from 'vue'
const txt = ref(100)
</script>

子组件:

<script setup>
import { defineProps, defineEmits } from 'vue'
defineProps({
  modelValue: String
})
const emit = defineEmits(['update:modelValue'])
</script>
<template>
  <div>
    <input type="text" :value="modelValue" @input="e => emit('update:modelValue', e.target.value)">
  </div>
</template>
<style scoped>
input {
  width: 14rem;
  height: 2rem;
}
</style>

使用defineModel改进后的子组件:

<script setup>
import { defineModel } from 'vue'
const modelValue = defineModel()
</script>
<template>
  <div>
    <input type="text" :value="modelValue" @input="e => modelValue = e.target.value">
  </div>
</template>

因为这是实验型,所以还需要配置一些东西才能生效

打开vite.config.js文件加入以下语句:

    {
      script: {
        defineModel: true
      }
    }

写完后,需要重新启动这个项目才能生效

到此这篇关于Vue3-新特性defineOptions和defineModel的文章就介绍到这了,更多相关Vue3 defineOptions和defineModel内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Vue基于iview table展示图片实现点击放大

    Vue基于iview table展示图片实现点击放大

    这篇文章主要介绍了Vue基于iview table展示图片实现点击放大,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-08-08
  • vue-router命名视图的使用讲解

    vue-router命名视图的使用讲解

    今天小编就为大家分享一篇关于vue-router命名视图的使用讲解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-01-01
  • 利用Vue实现一个markdown编辑器实例代码

    利用Vue实现一个markdown编辑器实例代码

    这篇文章主要给大家介绍了关于如何利用Vue实现一个markdown编辑器的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用Vue具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-05-05
  • vuejs2.0子组件改变父组件的数据实例

    vuejs2.0子组件改变父组件的数据实例

    本篇文章主要介绍了vuejs2.0子组件改变父组件的数据实例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-05-05
  • 从组件封装看Vue的作用域插槽的实现

    从组件封装看Vue的作用域插槽的实现

    这篇文章主要介绍了从组件封装看Vue的作用域插槽的实现,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-02-02
  • Vue3之状态管理器(Pinia)详解及使用方式

    Vue3之状态管理器(Pinia)详解及使用方式

    这篇文章主要介绍了Vue3之状态管理器(Pinia)详解及使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-03-03
  • Element-ui树形控件el-tree自定义增删改和局部刷新及懒加载操作

    Element-ui树形控件el-tree自定义增删改和局部刷新及懒加载操作

    这篇文章主要介绍了Element-ui树形控件el-tree自定义增删改和局部刷新及懒加载操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-08-08
  • vue框架制作购物车小球动画效果实例代码

    vue框架制作购物车小球动画效果实例代码

    最近在学习前端制作了一个购物车小球的动画效果,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友参考下吧
    2019-09-09
  • 解决vue-loader加载不上的问题

    解决vue-loader加载不上的问题

    这篇文章主要介绍了解决vue-loader加载不上的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-10-10
  • Vue项目分包打包配置(包含dev)完整过程

    Vue项目分包打包配置(包含dev)完整过程

    最近接到一个需求,公司需要对vue项目实现线上打包,下面这篇文章主要给大家介绍了关于Vue项目分包打包配置(包含dev)的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2023-06-06

最新评论