Vue组件:使用Prop实现父组件向子组件传递数据

news2024/11/24 4:46:10

1、Prop 基本用法

由于组件实例的作用域是孤立的,因此子组件的模板无法直接应用父组件的数据。如果想要通过父组件向子组件传递数据,就需要定义 Prop。Prop 是父组件用来传递数据的一个自定义属性,这样的属性需要定义在组件选项对象的 props 选项中。通过 props 选项中定义的属性可以将父组件的数据传递给子组件,而子组件需要显示地用 props 选项来声明 Prop。

注意事项:

(1)Prop 传递数据,只能从父组件向子组件传递,不能反其道而行。

(2)子组件接收到 Prop 传递的数据是只读的,不能对其进行修改操作。

【实例】使用Prop实现父组件向子组件传递数据,数据类型包括:字符串、数字、数组、对象。

(1)创建 ParentComponent.vue 父组件

<template>
    <fieldset class="b-parent">
        <legend>父组件</legend>
        <h3>使用Prop实现父组件向子组件传递数据</h3>
        <!-- 第三步:使用组件,并向子组件传递数据:字符串、数字、数组、对象 -->
        <ChildComponent :userName="userName" :age="age" :interest="interest" :blogInfo="blogInfo" />
    </fieldset>
</template>

<script>
//第一步:引用组件
import ChildComponent from '@/components/ChildComponent.vue'

export default {
    data() {
        return {
            // 数据类型:字符串、数字
            userName: 'pan_junbiao的博客',
            age: 36,
            // 数据类型:数组
            interest: ['游泳', '篮球', '羽毛球', '跑步'],
            // 数据类型:对象
            blogInfo: {
                blogName: '您好,欢迎访问 pan_junbiao的博客',
                blogUrl: 'https://blog.csdn.net/pan_junbiao'
            }
        }
    },
    //第二步:注册组件
    components: {
        ChildComponent,
    }
}
</script>

(2)创建 ChildComponent.vue 子组件

<template>
    <fieldset>
        <legend>子组件</legend>
        <p>用户姓名:{{ userName }}</p>
        <p>用户年龄:{{ age }}</p>
        <p>兴趣爱好:{{ interest.join(';') }}</p>
        <p>博客信息:{{ blogInfo.blogName }}</p>
        <p>博客地址:{{ blogInfo.blogUrl }}</p>
    </fieldset>
</template>

<script>
export default {
    // 使用 props 属性:接收父组件传递过来的数据
    props: ['userName', 'age', 'interest', 'blogInfo']
}
</script>

<style scoped>
fieldset {
    font-size: 18px;
    color: blue;
}
</style>

 (3)在 App.vue 根组件中,引入父组件

<template>
  <!-- 第三步:使用组件 -->
  <ParentComponent />
</template>

<script>
//第一步:引用组件
import ParentComponent from '@/components/ParentComponent.vue'

export default {
  //第二步:注册组件
  components: {
    ParentComponent,
  }
}
</script>

执行结果:

2、数据验证

组件可以为 Prop 指定验证要求。当开发一个可以被他人使用的组件时,验证可以让使用者更加准确地使用组件。使用验证的时候,Prop 接收的参数是一个对象,而不是一个字符串数组。例如,props : { age : Number},表示验证参数 age 须为 Number 类型,如果调用该组件时传入的 age 为 Number 以外的类型,则会在浏览器的控制台提示异常信息。

Vue.js 提供的 Prop 验证方式有多种,下面分别进行介绍。

(1)基础类型验证:允许参数为指定的一种类型。

props : {
    userName : String
}

(2)多种类型:允许参数为多种类型之一。

props : {
    tel : [Number, String]
}

(3)参数必须:参数必须有值且为指定的类型。

props : {
    userName : {
         type : String,
         required : true
    }
}

(4)参数默认:参数具有默认值。

props : {
    sex : {
         type : String,
         default : '男'
    }
}

(5)如果参数类型为数组或对象,则其默认值需要通过函数返回值的形式获取。

props: {
    //验证是否为数组类型且有默认值
    interest: {
        type: Array,
        default: function () {
            return ['游泳', '篮球', '羽毛球', '跑步']
        }
    },
    //验证是否为对象类型且有默认值
    blogInfo: {
        type: Object,
        default: function () {
            return {
                blogName: '您好,欢迎访问 pan_junbiao的博客',
                blogUrl: 'https://blog.csdn.net/pan_junbiao'
            }
        }
    }
}

(6)自定义验证函数:根据验证函数验证参数是否符合要求。

props: {
    //验证是否为数值且值必须大于等于18
    age: {
        type: Number,
        validator: function (value) {
            return value >= 18
        }
    }
}

【实例】对父组件中传递的数据进行 Prop 验证。

<template>
    <fieldset>
        <legend>子组件</legend>
        <p>用户姓名:{{ userName }}</p>
        <p>用户性别:{{ sex }}</p>
        <p>用户年龄:{{ age }}</p>
        <p>兴趣爱好:{{ interest.join(';') }}</p>
        <p>博客信息:{{ blogInfo.blogName }}</p>
        <p>博客地址:{{ blogInfo.blogUrl }}</p>
    </fieldset>
</template>

<script>
export default {
    // 使用 props 属性:接收父组件传递过来的数据,并进行数据验证
    props: {
        //验证是否字符串类型且必须有值
        userName: {
            type: String,
            required: true
        },
        //验证是否为字符串类型且默认值为男
        sex: {
            type: String,
            default: '男'
        },
        //验证是否为数值且值必须大于等于18
        age: {
            type: Number,
            validator: function (value) {
                return value >= 18
            }
        },
        //验证是否为数组类型且有默认值
        interest: {
            type: Array,
            default: function () {
                return ['游泳', '篮球', '羽毛球', '跑步']
            }
        },
        //验证是否为对象类型且有默认值
        blogInfo: {
            type: Object,
            default: function () {
                return {
                    blogName: '您好,欢迎访问 pan_junbiao的博客',
                    blogUrl: 'https://blog.csdn.net/pan_junbiao'
                }
            }
        }
    }
}
</script>

<style scoped>
fieldset {
    font-size: 18px;
    color: blue;
}
</style>

执行结果:

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

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

相关文章

并发集合(二):CopyOnWriteArrayList

1、CopyOnWriteArrayList介绍 CopyOnWriteArrayList 是一个线程安全的ArrayList。 CopyOnWriteArrayList 是基于Lock锁和线程副本的形式来保证线程安全的&#xff0c; 在写数据时&#xff0c;先获取Lock锁&#xff0c;然后复制一个副本&#xff0c;添加数据时&…

Delphi7实现Json对象的序列化与反序列化

在高版本的 Delphi 中&#xff0c;实现序列化和反序列化非常简单。然而&#xff0c;在 Delphi 7 中&#xff0c;这个过程仍然需要一些额外的努力。为了简化这个问题&#xff0c;我花了一些时间封装了一个支持序列化和反序列化的 JSON 解析库。 type{$M}TStartupParameters cla…

MySQL的服务器与客户端:架构解析与实践

文章目录 MySQL的服务器和客户端服务端处理客户端请求连接管理解析与优化查询缓存语法解析查询优化 存储引擎不同的存储引擎查看支持的存储引擎为不同的表设置存储引擎 MySQL是一个广泛使用的开源关系数据库管理系统&#xff0c;其核心架构由服务器端和客户端两大部分组成。本文…

9/3 链表-力扣160 、203、206

160.相交链表 给你两个单链表的头节点 headA 和 headB &#xff0c;请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点&#xff0c;返回 null 。 图示两个链表在节点 c1 开始相交&#xff1a; 题目数据 保证 整个链式结构中不存在环。 注意&#xff0c;函…

CUDA-MODE课程笔记 第9课: 归约(也对应PMPP的第10章)

我的课程笔记&#xff0c;欢迎关注&#xff1a;https://github.com/BBuf/how-to-optim-algorithm-in-cuda/tree/master/cuda-mode CUDA-MODE课程笔记 第9课: 归约&#xff08;也对应PMPP的第10章&#xff09; 课程笔记 本节课的题目。 这节课的内容主要是 Chapter 10 of PMPP …

TCP连接重置,到底怎么回事?还是得网工大佬来分析!

来源&#xff1a;科来。 连接建立失败并不仅仅包含无响应问题&#xff0c;还有一种常见的情况&#xff0c;即RST&#xff08;Reset&#xff09;包的发送。RST包是TCP协议中用来进行“连接重置”的数据包&#xff0c;本文将围绕RST包进行详细展开讨论。 TCP连接中为何会有RST包…

VideoCrafter1:Open Diffusion models for high-quality video generation

https://zhuanlan.zhihu.com/p/677918122https://zhuanlan.zhihu.com/p/677918122 视频生成无论是文生视频,还是图生视频,图生视频这块普遍的操作还是将图片作为一个模态crossattention进unet进行去噪,这一步是需要训练的,svd除此之外,还将图片和noise做拼接,这一步,很…

【压测】ab命令

安装 sudo yum install httpd-toolssudo apt update sudo apt install apache2-utils介绍 ab&#xff1a;参数数量错误 用法&#xff1a;ab [选项] [http[s]://]主机名[:端口]/路径 选项包括&#xff1a; -n 请求次数 执行的请求数 -c 并发数 同时发起的多个请求数量 -t 时间…

springboot博客系统

基于springbootvue实现的博客系统 &#xff08;源码L文ppt&#xff09;4-031 4 系统设计 博客系统的整体结构设计主要分为两大部分&#xff1a;管理员和博主。他们的权限不同&#xff0c;于是操作功能也有所不同。整体结构设计如图4-2所示。 图4-2 系统结构图 4.3 数据库设…

HALCON与LabVIEW的联合编程 视觉与控制结合

HALCON与LabVIEW的联合编程在工业自动化和视觉检测领域中越来越受到重视。通过将HALCON的强大图像处理能力与LabVIEW的灵活控制功能相结合&#xff0c;工程师们可以开发出高效且精确的自动化系统。这种整合不仅提高了系统的整体性能&#xff0c;还简化了开发流程。本文将详细介…

前端DatePicker组件设置默认日期并限制可选日期范围

前言 在前端 element-ui 组件库中有一款组件叫做 DatePicker&#xff0c;是一个灵活选择日期的封装组件&#xff0c;它既能选择单个日期&#xff0c;也能选择一个日期范围&#xff08;两个日期的组合&#xff09;&#xff0c;后者的应用场景主要有以下两类&#xff1a;1、作为…

妙用市场情绪找出大盘买卖点,逆向交易5年3倍|邢不行

这是邢不行第 118 期量化小讲堂的分享 作者 | 邢不行、密斯锌硒 前言&#xff1a;有这么一个交易品种&#xff0c;它时而是身披圣光的天使&#xff0c;让人一夜间财富暴涨&#xff0c;时而又化身诱人疯狂的恶魔&#xff0c;让人一息间血本无归&#xff0c;我们似乎很了解它&a…

基于plc的变压器冷却系统设计(论文+源码)

1总体方案设计 通过需求分析&#xff0c;本设计基于PLC的变压器冷却系统的整体结构如图2.1所示&#xff0c;系统采用S7-200 PLC为控制器&#xff0c;其结合温度传感器、电压电流传感器、主风机、备用风机等构成整个系统&#xff0c;具有手动和自动两种模式&#xff0c;在手动模…

C++——入门基础(下)

目录 一、引用 &#xff08;1&#xff09;引用的概念和定义 &#xff08;2&#xff09;引用的特性 &#xff08;3&#xff09;引用的使用 &#xff08;4&#xff09;const引用 &#xff08;5&#xff09;指针和引用的关系 二、inline 三、nullptr 四、写在最后 一、引用…

4.1 数据分析-excel 基本操作

第四节&#xff1a;数据分析-excel 基本操作 课程目标 学会excel 基本操作 课程内容 数据伪造 产生一份招聘数据 import pandas as pd from faker import Faker import random import numpy as np# 创建一个Faker实例&#xff0c;用于生成假数据&#xff0c;指定中文本地…

【Steam游戏星露谷物语添加Mod步骤】

Steam游戏星露谷物语添加Mod步骤 星露谷物语添加拖拉机模组一、安装SMAPI二、正式开始添加MOD 星露谷物语添加拖拉机模组 一、安装SMAPI 星露谷物语添加拖拉机mod为例&#xff0c;添加其它mod一样的步骤。 首先&#xff0c;打开Steam&#xff0c;打开一次星露谷物语这款游戏&…

echarts遍历区域折线图,单线和多线

// 单线折线图drawonelineCharts(){var echarts require("echarts");var lineCharts document.getElementsByClassName(lineChart); // 对应地使用ByClassNamethis.linecolor[#01FFD4,#1C70DD,#01FFD4,#1C70DD,#01FFD4,#1C70DD]for(var i 0;i < lineCharts.len…

2024.9.2

还没写完 #include <iostream> #include <cstring> using namespace std;class myString { private:char *str; //字符串int size; //实际字符长度int len; //字符串容量 public:myString():size(10) //无参构造函数{len siz…

大模型入门 ch01:大模型概述

本文是github上的大模型教程LLMs-from-scratch的学习笔记&#xff0c;教程地址&#xff1a;教程链接 STAGE 1&#xff1a; BUILDING 1. 数据准备与采样 LLM的预测过程&#xff0c;是一个不断预测下一个词&#xff08;准确的说是token&#xff09;的过程&#xff0c;每次根据输…

太狠了:华为的卫星通信能免费使用了

在科技日新月异的今天&#xff0c;手机已不再仅仅是通讯工具&#xff0c;它们正逐步成为我们生活中的全能助手。 而华为&#xff0c;作为科技领域的佼佼者&#xff0c;再次以其创新技术引领了一场卫星通信的革命。 近日&#xff0c;华为正式官宣Pura 70系列首发支持中国移动北…