第二十四课 Vue中子组件调用父组件数据

news2025/1/22 1:24:43

Vue中子组件调用父组件数据

Vue是不建议在不同的组件直接传递值的,我们需要使用props方法来进行组件间的值传递

子组件调用父组件数据

父模板的数据,子组件是无法直接调用的

无法直接调用

1)组件调用顶级对象中的data

    <div class="vue">
        <per></per>
    </div>
    <script>
        new Vue({
            el: '.vue',
            data: {
                vals: 'Hello World !'
            },
            components: {
                'per': {
                    template: '<span>嵌套组件父 {{vals}}</span>',
                }
            }
        });      
    </script>

2)子组件中调用父组件的数据

无法直接调用

    <div class="vue">
        <per></per>
    </div>
    <script>
        new Vue({
            el: '.vue',
            components: {
                'per': {
                    data: function(){
                        return {
                            vals: "我是父组件中的数据"
                        }
                    },
                    template: '<span>嵌套组件父 {{vals}} : <son></son></span>',
                    components: { //嵌套子组件的根为 a
                        'son': {
                            template: '<strong>嵌套子组件</strong>'
                        }    
                    }
                }
            }
        });      
    </script> 

props接受数据

props类似于为子组件定义了属性名,用于接受父组件传递进来的值,通过v-bind将定义好的属性并绑定到子组件实例上进行参数绑定。

1)子组件接受父组件的传值

    <script>
        new Vue({
            el: '#app',
            components: {
                per: {
                    data: () => ({
                        val: 'Hello World !'
                    }),
                    template: `
                                <div>
                                    <h1>这是父组件的内容 {{val}}</h1>
                                    <son :getVal="val"></son>
                                </div>
                                `,
                    components: {
                        son: {
                            props: ['getVal'],
                            template: '<h1>这是子组件的内容 {{getVal}}</h1>'
                        }
                    } 
                }
            }
        })
    </script>  

2)子组件介绍父组件的多值传递

props对应的数组对象,可以接受多值传递

    <div id="app">
        <per></per> 
    </div>
    <script>
        new Vue({
            el: '#app',
            components: {
                per: {
                    data: () => ({
                        val: 'Hello World !',
                        nums: 1000
                    }),
                    template: `
                                <div>
                                    <h1>这是父组件的内容 {{val}}</h1>
                                    <son :getVal="val" :getMore="nums"></son>
                                </div>
                                `,
                    components: {
                        son: {
                            props: ['getVal', 'getMore'],
                            template: '<h1>这是子组件的内容 {{getVal}}  {{getMore}}</h1>'
                        }
                    } 
                }
            }
        })
    </script>    

props数据过滤

props后的属性也可以是obj格式的对象,方便针对接受的参数进行过滤操作

1)字符过滤(接受的值是否为字符)

    <div id="app">
        <per></per> 
    </div>
    <script>
        new Vue({
            el: '#app',
            components: {
                per: {
                    data: () => ({
                        val: 'Hello World !'
                    }),
                    template: `
                                <div>
                                    <h1>这是父组件的内容 {{val}}</h1>
                                    <son :getVal="val"></son>
                                </div>
                                `,
                    components: {
                        son: {
                            props: {
                                'getVal': [String]
                            },
                            template: '<h1>这是子组件的内容 {{getVal}}</h1>'
                        }
                    } 
                }
            }
        })
    </script>

2)多数据类型过滤

当前传递进来的数据,只允许是数值或者字符

    <div id="app">
        <per></per> 
    </div>
    <script>
        new Vue({
            el: '#app',
            components: {
                per: {
                    data: () => ({
                        val: 'Hello World !'
                    }),
                    template: `
                                <div>
                                    <h1>这是父组件的内容 {{val}}</h1>
                                    <son :getVal="val"></son>
                                </div>
                                `,
                    components: {
                        son: {
                            props: {
                                'getVal': [String, Number]
                            },
                            template: '<h1>这是子组件的内容 {{getVal}}</h1>'
                        }
                    } 
                }
            }
        })
    </script>

3)多种过滤方式

a)为当前空值传递赋默认值
b)类型检测
c)自定义验证函数

官方示例:

Vue.component('example', {
  props: {
    // 基础类型检测 (`null` 意思是任何类型都可以)
    propA: Number,
    // 多种类型
    propB: [String, Number],
    // 必传且是字符串
    propC: {
      type: String,
      required: true
    },
    // 数字,有默认值
    propD: {
      type: Number,
      default: 100
    },
    // 数组/对象的默认值应当由一个工厂函数返回
    propE: {
      type: Object,
      default: function () {
        return { message: 'hello' }
      }
    },
    // 自定义验证函数
    propF: {
      validator: function (value) {
        return value > 10
      }
    }
  }
})

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2280097.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

面试--你的数据库中密码是如何存储的?

文章目录 三种分类使用 MD5 加密存储加盐存储Base64 编码:常见的对称加密算法常见的非对称加密算法https 传输加密 在开发中需要存储用户的密码&#xff0c;这个密码一定是加密存储的&#xff0c;如果是明文存储那么如果数据库被攻击了&#xff0c;密码就泄露了。 我们要对数据…

模型部署工具01:Docker || 用Docker打包模型 Build Once Run Anywhere

Docker 是一个开源的容器化平台&#xff0c;可以让开发者和运维人员轻松构建、发布和运行应用程序。Docker 的核心概念是通过容器技术隔离应用及其依赖项&#xff0c;使得软件在不同的环境中运行时具有一致性。无论是开发环境、测试环境&#xff0c;还是生产环境&#xff0c;Do…

Restormer: Efficient Transformer for High-Resolution Image Restoration解读

论文地址&#xff1a;Restormer: Efficient Transformer for High-Resolution Image Restoration。 摘要 由于卷积神经网络&#xff08;CNN&#xff09;在从大规模数据中学习可推广的图像先验方面表现出色&#xff0c;这些模型已被广泛应用于图像复原及相关任务。近年来&…

四、CSS效果

一、box-shadow box-shadow:在元素的框架上添加阴影效果 /* x 偏移量 | y 偏移量 | 阴影颜色 */ box-shadow: 60px -16px teal; /* x 偏移量 | y 偏移量 | 阴影模糊半径 | 阴影颜色 */ box-shadow: 10px 5px 5px black; /* x 偏移量 | y 偏移量 | 阴影模糊半径 | 阴影扩散半…

火狐浏览器Firefox一些配置

没想到还会开这个…都是Ubuntu的错 一些个人习惯吧 标签页设置 常规-标签页 1.按最近使用顺序切换标签页 2.打开新标签而非新窗口&#xff08;讨厌好多窗口&#xff09; 3.打开新链接不直接切换过去&#xff08;很打断思路诶&#xff09; 4.关闭多个标签页时不向我确认 启动…

MECD+: 视频推理中事件级因果图推理--VLM长视频因果推理

论文链接&#xff1a;https://arxiv.org/pdf/2501.07227v1 1. 摘要及主要贡献点 摘要&#xff1a; 视频因果推理旨在从因果角度对视频内容进行高层次的理解。然而&#xff0c;目前的研究存在局限性&#xff0c;主要表现为以问答范式执行&#xff0c;关注包含孤立事件和基本因…

Python基于Django的社区爱心养老管理系统设计与实现【附源码】

博主介绍&#xff1a;✌Java老徐、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;&…

Docker 单机快速部署大数据各组件

文章目录 一、Spark1.1 NetWork 网络1.2 安装 Java81.3 安装 Python 环境1.4 Spark 安装部署 二、Kafka三、StarRocks四、Redis五、Rabbitmq六、Emqx6.1 前言6.2 安装部署 七、Flink八、Nacos九、Nginx 一、Spark 1.1 NetWork 网络 docker network lsdocker network create -…

【MySQL】:Linux 环境下 MySQL 使用全攻略

&#x1f4c3;个人主页&#xff1a;island1314 &#x1f525;个人专栏&#xff1a;MySQL学习 ⛺️ 欢迎关注&#xff1a;&#x1f44d;点赞 &#x1f442;&#x1f3fd;留言 &#x1f60d;收藏 &#x1f49e; &#x1f49e; &#x1f49e; 1. 背景 &#x1f680; 世界上主…

【思科】NAT配置

网络拓扑图 这个网络拓扑的核心是Router1&#xff0c;它通过配置多个VLAN子接口来实现对不同VLAN的支持&#xff0c;并通过NAT进行地址转换&#xff0c;使得内部网络能够与外部网络进行通信。Router1上配置了FastEthernet0/0.x接口&#xff0c;并启用了802.1Q封装&#xff0c;…

WGAN - 瓦萨斯坦生成对抗网络

1. 背景与问题 生成对抗网络&#xff08;Generative Adversarial Networks, GANs&#xff09;是由Ian Goodfellow等人于2014年提出的一种深度学习模型。它包括两个主要部分&#xff1a;生成器&#xff08;Generator&#xff09;和判别器&#xff08;Discriminator&#xff09;…

【数学建模美赛速成系列】O奖论文绘图复现代码

文章目录 引言折线图 带误差棒得折线图单个带误差棒得折线图立体饼图完整复现代码 引言 美赛的绘图是非常重要得&#xff0c;这篇文章给大家分享我自己复现2024年美赛O奖优秀论文得代码&#xff0c;基于Matalab来实现&#xff0c;可以直接运行出图。 折线图 % MATLAB 官方整理…

兼职全职招聘系统架构与功能分析

2015工作至今&#xff0c;10年资深全栈工程师&#xff0c;CTO&#xff0c;擅长带团队、攻克各种技术难题、研发各类软件产品&#xff0c;我的代码态度&#xff1a;代码虐我千百遍&#xff0c;我待代码如初恋&#xff0c;我的工作态度&#xff1a;极致&#xff0c;责任&#xff…

svn tag

一般发布版本前&#xff0c;需要在svn上打个tag。步骤如下&#xff1a; 1、空白处右击&#xff0c;选择TortoiseSVN->Branch/tag; 2、填写To path&#xff0c;即tag的路基以及tag命名&#xff08;一般用版本号来命名&#xff09;&#xff1b;填写tag信息&#xff1b;勾选cr…

项目开发实践——基于SpringBoot+Vue3实现的在线考试系统(七)

文章目录 一、题库管理模块实现1、新增题目功能实现1.1 页面设计1.2 前端功能实现1.3 后端功能实现1.4 效果展示2、题目列表功能实现2.1 页面设计2.2 前端功能实现2.3 后端功能实现2.3.1 后端查询题目列表接口实现2.3.2 后端编辑试题接口实现2.4 效果展示二、代码下载一、题库管…

【Cesium入门教程】第一课:Cesium简介与快速入门详细教程

Cesium概述 Cesium是一个基于JavaScript开发的WebGL三维地球和地图可视化库。 它利用了现代Web技术&#xff0c;如HTML5、WebGL和WebAssembly&#xff0c;来提供跨平台和跨浏览器的三维地理空间数据可视化。 Cesium的主要特点包括&#xff1a; 跨平台、跨浏览器&#xff1a…

Unity中实现伤害跳字效果(简单好抄)

第一步骤安装并导入Dotween插件&#xff08;也可以不用导入之后直接下载我的安装包&#xff09; 官网DOTween - 下载 第二步&#xff1a; 制作跳字预制体 建议把最佳适应打开&#xff0c;这样就不怕数字太大显示不全了。 第三步&#xff1a;创建一个空对象并编写脚本JumpNumbe…

AI与低代码发展下的程序员就业展望:经济环境对就业市场的影响

AI与低代码发展下的程序员就业展望&#xff1a;经济环境对就业市场的影响 随着人工智能&#xff08;AI&#xff09;技术的不断进步和低代码平台的日益成熟&#xff0c;软件开发行业正在经历一场深刻的变革。与此同时&#xff0c;全球经济环境的变化也对程序员的就业市场产生了…

复古怀旧美感35mm胶片模拟色调颗粒汽车商业摄影Lightroom调色预设 Mike Crawat 2024 35MM FILM LOOK PRESETS

10个电脑端手机端35mm胶片模拟汽车摄影风光人像扫街LR预设 Mike Crawat 2024 35MM FILM LOOK PRESETS 这个精心制作的 10 个预设集合旨在为您的数码照片提供 35 毫米胶片的丰富、怀旧美感。每个预设都复制了标志性胶片的独特色调、颗粒和颜色配置文件&#xff0c;让您只需单击…

Hadoop 和 Spark 的内存管理机制分析

&#x1f496; 欢迎来到我的博客&#xff01; 非常高兴能在这里与您相遇。在这里&#xff0c;您不仅能获得有趣的技术分享&#xff0c;还能感受到轻松愉快的氛围。无论您是编程新手&#xff0c;还是资深开发者&#xff0c;都能在这里找到属于您的知识宝藏&#xff0c;学习和成长…