• vue3.0 组件传参


    1,父到子 props

    父组件

    1. <template>
    2. <h1>我是父组件传参</h1>
    3. <navItem :ref="(el) => (navFnEL = el)" :list="list" @send="getInfo"></navItem>
    4. </template>

    子组件

    1. <script>
    2. import { onMounted, reactive } from "vue";
    3. export default {
    4. props: {
    5. list: {
    6. type: Array,
    7. default: () => {
    8. return [];
    9. },
    10. },
    11. },
    12. setup(props, context) {
    13. const list = reactive(props.list);
    14. console.log("title", list);
    15. const toFather = () => {
    16. context.emit("send", 666);
    17. };
    18. const init = (e) => {
    19. console.log("父组件主动调用子组件", e);
    20. };
    21. onMounted(()=>{
    22. console.log("9999999999999")
    23. })
    24. return {
    25. list,
    26. toFather,
    27. init
    28. };
    29. },
    30. };
    31. </script>

    解析

    父组件 在子组件标签上使用 v-bind:list="list"

    子组件使用props接收  list

    然后在setup 里使用 props.list 拿到数据

    2.子到父     context.emit()

    子组件

    context.emit("send", 666);

    父组件

      <navItem :ref="(el) => (navFnEL = el)" :list="list" @send="getInfo"></navItem>
    1. let getInfo = (e) => {
    2. console.log("获取数据", e);
    3. };

    使用ref 

    父组件 

      <navItem :ref="(el) => (navFnEL = el)" :list="list" @send="getInfo"></navItem>
    1. setup(props, context) {
    2. const navFnEL = ref();
    3. onMounted(() => {
    4. console.log("fnGetEl", fnGetEl.value);//子组件暴露的数据
    5. console.log("navFn", navFnEL);
    6. });
    7. return {
    8. navFnEL
    9. };
    10. };
    11. },

    子组件

    1. setup(props, context) {
    2. const list = reactive(props.list);
    3. onMounted(()=>{
    4. console.log("9999999999999")
    5. })
    6. return {
    7. list //父组件通过ref能够访问到的数据
    8. };
    9. },

    注意了

    1,绑定ref时需要这样使用

    :ref="(el) => (navFnEL = el)"

    对应    const navFnEL = ref();  navFnEL 能够拿到 所有的子组件返回的内容

    并且需要return 返回 navFnEL

    使用getCurrentInstance获取到父级的实例 调用父级的方法修改数据

    1. import { getCurrentInstance} from "vue";
    2. const ctx = getCurrentInstance()
    3. ctx.parent.setupState.getInfo(999999999)

    1. let getInfo = (e) => {
    2. console.log("获取数据", e);
    3. };

    v-model 组件交互

     <navItem v-model:showFlag="show"></navItem>

    1. export default {
    2. props: {
    3. showFlag:{
    4. type:Boolean,
    5. default:false
    6. }
    7. },
    8. setup(props, context) {
    9. const toFather = () => {
    10. context.emit("update:showFlag",false)
    11. };
    12. onMounted(()=>{
    13. ctx.parent.setupState.getInfo(999999999)
    14. })
    15. return {
    16. toFather
    17. };
    18. },
    19. };

  • 相关阅读:
    泰坦陨落找不到msvcp120.dll怎么解决?分享四种解决方法
    双十二怎么入手物品,2022年双十二值得入手的好物分享
    什么样的程序员在 35 岁以后依然被公司抢着要?
    什么是闭包,应用场景是什么?
    java的生命周期
    Golang 程序启动原理详解
    第4套.py
    【Linux命令】su 和 sudo
    园区宿舍水电表改造解决方案
    mysql忘记密码 -linux -centos
  • 原文地址:https://blog.csdn.net/qq_42389674/article/details/125500371