vue3-命名空间组件使用

文章介绍了在Vue3项目中如何进行组件的模块化管理,通过在一个js文件中导入并导出多个组件,如header、body和footer,然后在项目中使用命名空间导入这些组件。这种方式使得组件之间的关系更加清晰,特别是在使用setup语法的情况下。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

官方文档位置:

 特点:

  • 可以一次import多个组件
  • 组件之间关系更明确,例如官方举例的两个组件form-input和form-label,很清楚的知道用于表单
  • 需要是vue3项目,script需要是setup格式

 使用:

1.创建文件夹包裹相应组件和一个用于引入导出的js文件

在这里插入图片描述

2.在js文件中进行引入和导出

//index.js
//布局头部组件
import header from './header.vue'
//布局主题组件
import body from './body.vue'
//布局底部组件
import footer from './footer.vue'

export {
    header,
    body,
    footer
}

3.项目中使用命名空间组件

<template>
    <div>
        <Layout.Header></Layout.Header>
        <Layout.Header name="命名空间组件"></Layout.Header>
    </div>
</template>

<script setup>
import * as Layout from './components/layout'
</script>

<style scoped lang="scss">
</style>

### 使用 `v-model` 实现 Vue3 组件中的双向数据绑定 #### 基本概念 在 Vue3 中,`v-model` 是一种用于创建基于表单输入、多选框以及下拉列表等元素上的双向数据绑定的简洁方式。它本质上是一个语法糖,简化了 `$emit(&#39;update:modelValue&#39;, newValue)` 和接收父级传递的数据作为 prop 的过程[^1]。 #### 单个属性的双向绑定 对于简单的场景,默认情况下 `v-model` 将会监听名为 `modelValue` 的 props 并且发出带有新值的事件 `update:modelValue` 来更新父组件的状态: ```html <!--组件 --> <template> <input :value="modelValue" @input="$emit(&#39;update:modelValue&#39;, $event.target.value)" /> </template> <script setup> import { defineProps } from &#39;vue&#39;; const props = defineProps([&#39;modelValue&#39;]); </script> ``` ```html <!--组件 --> <MyInput v-model="parentData"/> ``` 这里展示了如何在一个自定义 `<MyInput>` 组件里应用 `v-model` 进行基本的双向绑定操作[^4]。 #### 多个属性的双向绑定 当涉及到更复杂的交互需求时,比如想要在同一组件内处理多个可编辑字段,则可以通过指定不同的参数名来扩展默认行为: ```html <!--组件 --> <template> <div> <input :value="firstName" @input="$emit(&#39;update:firstName&#39;, $event.target.value)"> <input :value="lastName" @input="$emit(&#39;update:lastName&#39;, $event.target.value)"> </div> </template> <script setup> import { defineProps } from &#39;vue&#39;; const props = defineProps({ firstName: String, lastName: String }); </script> ``` ```html <!--组件 --> <MyInputs v-model:firstName="first" v-model:lastName="last" /> ``` 此例子说明了怎样利用命名空间特性让同一个子组件支持两个独立变量之间的同步变化[^5]。 #### 新增功能:使用宏函数 `defineModel()` 从 Vue 3.4 版本起引入了一个新的编译器宏——`defineModel()` ,这使得开发者能够更加方便地封装具有内置模型逻辑的基础 HTML 表单控件。该方法允许直接返回一个对象形式的结果给模板层面上使用的 `v-model` 属性[^3]: ```javascript // 子组件脚本部分 <script setup> import { ref, defineModel } from &#39;vue&#39; let model = defineModel() let internalState = ref(model) function handleInput(event){ const newVal = event.target.value; internalState.value = newVal; // 更新内部状态 model = newVal; // 同步外部模型 } </script> ``` 以上代码片段解释了通过 `defineModel()` 方法可以在不显式声明 emit 或者 props 的前提下完成相同的功能,并保持良好的解耦合度。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

秋月华星

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值