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

Vue3中如何进行封装?—组件之间的传值

用了很久一段时间Vue3+Ts了,工作中对一些常用的组件也进行了一些封装,这里对封装的一些方法进行一些简单的总结。

1.props传递

首先在主组件进行定义传值

<template><div>这里是主组件<common :first="first"></common></div>
</template>
​
<script setup lang="ts">
import common from './common.vue';
import {ref} from 'vue'
const first=ref('传入通用组件的值')

代码中common是定义的要封装的组件,这里first即是要传入的值

然后子组件要进行接收传来的值,如下

<template><div>这里是通用组件{{ props.first }}</div>
</template>
​
<script setup lang="ts">
​
const props=defineProps({first:String
})
</script>

这里与vue2不同的是需要利用defineProps进行参数的接收,我这里用到了TS,所以也加入了类型声明。

2.监听参数变化

在一些业务中,父组件传给子组件的数据有时候是动态的,这个时候就需要对参数的改变进行识别了

这里就用到watch了

watch(props,(newVal) => {console.log(props,'props改变了');},{immediate: true,}
);

对props进行监听,如果进行改变,然后怎么进行操作,可以更细节的处理了。

这里watch的使用可以参考官网响应式 API:核心 | Vue.js

3.触发事件

子向父亲传递信息,或者使用父亲的方法应该怎么做呢,这是就是用到emits了

首先父组件对子组件绑定方法

<template><div>这里是主组件<common :first="first" @getValue="getValue"></common> //这里的@就是绑定的方法</div>
</template>
​
<script setup lang="ts">
import common from './common.vue';
import {ref} from 'vue'
const first=ref('传入通用组件的值')
const getValue=(val:string)=>{ //注意这里的参数即是子组件想要传的值console.log(val);
}
</script>

绑定后需要在子组件进行接收

<template><div>这里是通用组件{{ props.first }}</div>
</template>
​
<script setup lang="ts">
​
const props=defineProps({first:String
})
const emits=defineEmits(['getValue'])//这里进行定义接收
watch(props,(newVal) => {console.log(props,'props改变了');emits('getValue','我触发了') //想要触发时进行调用},{immediate: true,}
);
</script>

这里在子组件定义接收后,再触发时用emits('方法名',传递参数)的形式进行触发,而这个传递参数是你在父组件绑定方法中所定义的参数。

4.调用子组件方法

在封装中,也会遇到一些调用子组件的方法,我现在常用的是下面这种

先用defineExpose将方法进行暴露

const out=(val:string)=>{console.log('我是子组件的方法',val);
}
defineExpose({out,
});

然后在父组件使用ref绑定子组件,获取其方法

<template><div>这里是主组件<common :first="first" @getValue="getValue" ref="Common"></common></div>
</template>
​
<script setup lang="ts">
import common from './common.vue';
import {ref,onMounted} from 'vue'
const first=ref('传入通用组件的值')
const getValue=(val:string)=>{console.log(val);
}
const Common=ref() //这里ref名称与上面绑定的ref要保持一致
onMounted(() => {Common.value.out('传给你')// 结果为 ‘我是子组件的方法 传给你’
});
</script>

这里就是先用ref绑定,然后利用其调用方法,括号内的参数即在子组件定义参数。

5.插槽

插槽方法可以见我以前总结的内容,这里不再详细讲解

vue中的插槽详细介绍_and design vue树形控件插槽title要多个字段_时雨.`的博客-CSDN博客

6.总结

上述内容其实就是对常用的组件传值进行的一个总结,真实内容封装其实还是要看组件的具体需求,但是都可能是对这些传值进行的一个应用,后续如果对封装有进一步了解,会进一步补充,敬请期待。。。

http://www.lryc.cn/news/145313.html

相关文章:

  • 实训笔记8.25
  • vue自定义监听元素宽高指令
  • 网络爬虫到底是个啥?
  • 前端行级元素和块级元素的基本区别
  • CentOS 7用二进制安装MySQL5.7
  • 华为加速回归Mate 60发布, 7nm全自研工艺芯片
  • Linux系列讲解 —— 【systemd】下载及编译记录
  • u-view 的u-calendar 组件设置默认日期后,多次点击后,就不滚动到默认日期的位置
  • vue naive ui 按钮绑定按键
  • Viobot基本功能使用及介绍
  • 《PMBOK指南》第七版12大原则和8大绩效域
  • docker 启动命令
  • C++ DAY7
  • Vue2 使用插件 Volar 报错:<template v-for> key should be placed on the <template> tag.
  • 启动线程方法 start ()和 run ()有什么区别
  • Java的全排列模板
  • 读书笔记——《万物有灵》
  • 面试现场表现:展示你的编程能力和沟通技巧
  • 34亿的mysql表如何优雅的扩字段长度兵并归档重建
  • C#_进程单例模式.秒懂Mutex
  • AcWing 5050. 排序 (每日一题)
  • 【TypeScript】proxy 和 Reflect
  • STM32f103入门(5)定时器中断
  • Mybatis查询数据
  • 【前车之鉴】: 2023最新教程-将java程序打包到maven私服的正确打开方式,详细流程介绍不怕你掌握不了
  • 如何理解IaaS、PaaS、SaaS?盘点受欢迎的八大SaaS平台!
  • 立创EDA专业版的原理图上器件有一个虚线框
  • JUC并发编程--------基础篇
  • 秒懂算法2
  • 隐秘的角落:Java连接Oracle提示Connection timed out