Vue3自定义封装组件,父子组件传值

简介: Vue3自定义封装组件,父子组件传值

一、封装vue组件

  一个vue页面可以是一个组件,封装组件的根本好处是代码复用,如果一个功能的代码块需要重复书写两次以上,就可以考虑把它封装成组件了。

示例:

  我需要重复使用一个lable框+switch组成的样式,因为将这部分代码单独放到了一个vue页面,取名Switch.vue

<template>
    <div>
        <van-row justify="space-between">
            <van-col span="8">
              <!--lable框,用于填写属性名-->
                <van-field maxlength="6" v-model="extendPropsName" />
            </van-col>
            <van-col span="16">
              <!--开关选择器-->
                <van-switch v-model="extendProps" />
            </van-col>
        </van-row>
    </div>
</template>
<script>
import { ref, defineExpose } from "vue";
export default {
  //接收父组件传来的值,这里可以赋默认值
    props: {
        extendPropsName: '',
        extendProps: false
    },
   //props中存放的是父组件传进来的值
    setup(props) {
        let extendPropsName = ref(props.extendPropsName);//属性名
        let extendProps =ref(props.extendProps);//开关选择器
        const componName = 'switches';
        defineExpose({ extendPropsName, extendProps, componName });//暴露给父组件的值
        //返回给template使用
        return {
            extendPropsName,
            extendProps,
            componName
        }
    }
}
</script>

二、使用自定义vue组件

  封装好的组件可以被另一个vue页面作为子组件引入

普通引入方式如下:

<template>
  <!--父组件向子组件传值-->
     <switches :extendProps="extendProps" :extendPropsName="extendPropsName"></switches>
</template>
<script>
//因为使用的是export default向外暴露成员,import后面的组件名随便写,但要有辨识度
import switches from "@/components/DynamicComponent/Switch.vue";
import { ref } from "vue";
export default {
    components: {switches}, //在components登记后才能做为自定义标签使用
    setup() {
    let extendProps=ref();
    let extendPropsName=ref();
    return{
      extendProps,
      extendPropsName
    }
  }
}
</script>

搭配使用component标签引入:

component标签:它的用途是可以动态绑定我们的组件,根据数据不同更换不同的组件.

官方说明:渲染一个“元组件”为动态组件。依 is 的值,来决定哪个组件被渲染

<template>
  <component v-for="item in itemDynamicProps.data" :key="item.extendPropsID"
                :is="item.componentType" :extendProps="extendProps"  :extendPropsName="item.extendPropsName" ></component>
</template>
<script>
//用一个component标签显示两个自定义组件
import switches from "@/components/DynamicComponent/Switch.vue";
import lables from "@/components/DynamicComponent/Lable.vue";
import { reactive } from "vue";
export default {
    components: { switches,lables }, //在components登记后才能做为自定义标签使用
    setup() {
    //在component标签内动态显示的组件,对象包data数组是为了更容易实现响应式
    let itemDynamicProps = reactive({ data: [
      {extendPropsID:1,
      componentType:switches,
      extendProps:'开关选择器',
      extendPropsName:'开关选择器的名字'},
      {extendPropsID:2,
      componentType:lables ,
      extendProps:'输入框',
      extendPropsName:'输入框的名字'}
    ], });
    return{
      itemDynamicProps 
    }
  }
}
</script>

三、父子组件传值

  标题二已经说明了父组件如何向子组件传值,但我们偶尔也需要子组件向父组件传值。

子组件:

defineExpose({ extendPropsName, extendProps, componName });//暴露给父组件的值

父组件:

  使用子组件时通过ref属性获取子组件的值

<component :ref="setPropsRef"/>
相关文章
|
4月前
|
前端开发 JavaScript 测试技术
Vue3中v-model在处理自定义组件双向数据绑定时,如何避免循环引用?
Web 组件化是一种有效的开发方法,可以提高项目的质量、效率和可维护性。在实际项目中,要结合项目的具体情况,合理应用 Web 组件化的理念和技术,实现项目的成功实施和交付。通过不断地探索和实践,将 Web 组件化的优势充分发挥出来,为前端开发领域的发展做出贡献。
151 64
|
4月前
|
缓存 JavaScript UED
Vue3中v-model在处理自定义组件双向数据绑定时有哪些注意事项?
在使用`v-model`处理自定义组件双向数据绑定时,要仔细考虑各种因素,确保数据的准确传递和更新,同时提供良好的用户体验和代码可维护性。通过合理的设计和注意事项的遵循,能够更好地发挥`v-model`的优势,实现高效的双向数据绑定效果。
197 64
|
4月前
|
JavaScript
在 Vue 3 中,如何使用 v-model 来处理自定义组件的双向数据绑定?
需要注意的是,在实际开发中,根据具体的业务需求和组件设计,可能需要对上述步骤进行适当的调整和优化,以确保双向数据绑定的正确性和稳定性。同时,深入理解 Vue 3 的响应式机制和组件通信原理,将有助于更好地运用 `v-model` 实现自定义组件的双向数据绑定。
|
JavaScript
Vue父子组件传值(porvide+inject实现组件通信)
如果我们需要把父组件的值传递给子组件,而且子组件可能存在层层嵌套,那么就可以使用provide+inject的方法来实现组件之间的通信
206 0
Vue父子组件传值(porvide+inject实现组件通信)
|
JavaScript 前端开发
前端-vue基础63-非父子组件传值
前端-vue基础63-非父子组件传值
105 0
前端-vue基础63-非父子组件传值
|
JavaScript
Vue父子组件传值通讯,超详细注释
Vue父子组件传值通讯,超详细注释
254 0
|
JavaScript 开发工具 git
23、vue父子组件之间的传值
前言:本章主要说下父子组件的传值,为商品列表组件之间的传值做一个基础预热。 Github:https://github.com/Ewall1106/mall(请选择分支chapter23) 1、父组件向子组件传值 (1)第一个就是要明白怎么在父页面中向子组件中传值? 你可以给子组件传入一个静态的值: 图片来自vue官网 但我们一般都是需要传动态的值,所以需要v-bind绑定: 图片来自vue官网 当然,你传的值可以是数字、对象、数组等等,参见vue官网。
1171 0
|
JavaScript
初识 Vue(15)---(父子组件传值)
父子组件传值 示例:父组件向子组件传递数据 在 Vue 中 ,父组件向子组件传值,通过属性的方式来进行传递 父子组件传值 var counter ={ p...
1246 0

热门文章

最新文章