• 第三十节——组合式API组件传值


    一、父传子

    子组件

    1. <template>
    2. <div>
    3. <v3></v3>
    4. </div>
    5. </template>
    6. <script setup>
    7. // 直接引入对应的组件 无需注册可以直接使用
    8. import v3 from "./v3.vue";
    9. import { defineProps } from 'vue'
    10. /**
    11. * 定义接收父组件传过来的参数
    12. * 对象里面的选项和props一直
    13. */
    14. defineProps(['name'])
    15. </script>

    父组件

    1. <template>
    2. <div>
    3. <v3 name="李四"></v3>
    4. </div>
    5. </template>
    6. <script setup>
    7. // 直接引入对应的组件 无需注册可以直接使用
    8. import v3 from "./v3.vue";
    9. </script>

    子组件

    1. <template>
    2. <div>哈哈哈{{ name }}</div>
    3. </template>
    4. <script setup>
    5. import { defineProps } from "vue";
    6. /**
    7. * 定义接收父组件传过来的参数
    8. * 对象里面的选项和props一直
    9. */
    10. defineProps(["name"]);
    11. </script>

    二、子传父

    父组件

    1. <template>
    2. <div>
    3. <!-- 传入的方法 -->
    4. <v3 @get="get" name="李四"></v3>
    5. </div>
    6. </template>
    7. <script setup>
    8. // 直接引入对应的组件 无需注册可以直接使用
    9. import v3 from "./v3.vue";
    10. const get = (val) => {
    11. console.log(val)
    12. }
    13. </script>

    子组件

    1. <template>
    2. <div>哈哈哈{{ name }}</div>
    3. <button @click="toParentData">往父组件传值</button>
    4. </template>
    5. <script setup>
    6. import { defineProps, defineEmits } from "vue";
    7. /**
    8. * 定义接收父组件传过来的参数
    9. * 对象里面的选项和props一直
    10. */
    11. defineProps(["name"]);
    12. // 定义一个变量来接收父组件传来的方法
    13. const emit = defineEmits(["get"]);
    14. // 定义一个事件
    15. const toParentData = () => {
    16. // 使用emit往父组件传
    17. emit("get",'我是这里传过去的')
    18. }
    19. </script>

    三、祖孙传值

    上级组件

    1. <template>
    2. <div>
    3. <Child1 @handle2="handle" name="来自爷爷的问候"></Child1>
    4. </div>
    5. </template>
    6. <script setup>
    7. import Child1 from "./child1.vue";
    8. import { provide } from "vue";
    9. /**
    10. * 统一下发
    11. */
    12. provide("info", { name: "张三", age: 18 });
    13. </script>

    孙级组件

    1. <template>
    2. <div>孙组件 ---{{ info.name }}</div>
    3. </template>
    4. <script setup>
    5. import { inject } from 'vue'
    6. // 拿到上层下发的值
    7. const info = inject('info')
    8. </script>

    四、同级组件

    推荐使用状态管理,这里简单介绍一下vuex的使用

    1、定义store

    1. import { createStore } from 'vuex'
    2. // 创建一个vuex并导出
    3. export default createStore({
    4. state: {
    5. num: 1
    6. },
    7. mutations: {
    8. add (state) {
    9. state.num += 1
    10. }
    11. }
    12. })

    2、在页面中使用

    1. <template>
    2. <div>
    3. <!-- 在template里面使用和一前一样 -->
    4. 我是vuex {{ $store.state.num }}
    5. <button @click="add">vuex +1</button>
    6. </div>
    7. </template>
    8. <script setup>
    9. // 引入store
    10. import { useStore } from 'vuex'
    11. // 老规矩,拿钩子创建一个store
    12. const store = useStore()
    13. const add = () => {
    14. // 调用方式和vue2几乎一样,只要注意使用useStore() 返回的调用就行
    15. store.commit("add")
    16. }
    17. </script>

    五、自定义组件使用v-model

    封装input组件实现并实现双向绑定

    1、父级组件

    1. <template>
    2. <div>
    3. <!--
    4. 在自定义组件上使用v-model
    5. 需要在后面加上:参数名,这个参数名会被子组件接收
    6. -->
    7. <qf-input v-model:value="name"></qf-input>
    8. {{ name }}
    9. </div>
    10. </template>
    11. <script setup>
    12. import { ref } from "vue";
    13. const name = ref("张三");
    14. </script>

    2、子组件

    1. <template>
    2. <div>
    3. <input :value="value" @input="inputChange" type="text" placeholder="一个普通的输入框" />
    4. </div>
    5. </template>
    6. <script setup>
    7. /**
    8. * 这个value属性是 v-model传入的
    9. * 这个value 必须 和 传入的参数名一致
    10. */
    11. defineProps(["value"]);
    12. /**
    13. * 必须使用update:加上双向绑定的参数名
    14. */
    15. const emit = defineEmits(["update:value"]);
    16. const inputChange = (event) => {
    17. /**
    18. * 参数每次改变的时候 emit 抛出一个事件
    19. * 会自动 修改传入的值
    20. */
    21. emit("update:value", event.taget.value);
    22. };
    23. </script>
  • 相关阅读:
    澳大利亚博士后招聘|国立大学—太阳能电池方向
    Android 开机动画的启动
    用项目管理管PMP考试我该如何准备?
    Lock锁:ReentrantLock的可打断和可重入特性
    大数据随记 —— 利用Python分析快手APP全国大学生用户数据(2022 年初赛第四题 )
    css 10-13
    6-5漏洞利用-SSH弱口令破解利用
    nginx 教程
    C++ new简介和内存管理
    Spring Cloud【实现用户鉴权(什么是JWT、JWT原理、用户微服务、JWT工具类、用户服务实现JWT鉴权)】(八)
  • 原文地址:https://blog.csdn.net/weixin_57017198/article/details/134264593