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

vue父子传参的方式——Prop

Prop

每一个组件都有一个props的属性,用来接收外部传递的数据

这里我拿一个分页组件为例:

一、基础语法

1、父组件传递数据

父组件在向子组件传递数据时,基础语法如下:

<template><div><common-page :pagination="pagination" @change="handlePageChange"/></div>
</template><script>
import CommonPage from '@/components/common/CommonPage'
export default {components: {CommonPage,},data() {return {/* 分页参数 */pagination: {current: 1,pageSize: 10,total: 0,pageSizeOptions: [10, 20, 30, 50, 100],showQuickJumper: true,showSizeChanger: true,},};},methods: {//分页、筛选变化时触发handlePageChange({ pageSize, current }) {this.pagination.current = currentthis.pagination.size = pageSize},}
};
</script>

传递的数据中,除了静态的字符串以外,其他所有数据在传递时,都需要通过v-bind进行传递。

2、子组件接受数据

export default {props: {pagination: {type: Object, // 指定属性的类型为对象。required: true, // 指定属性是必需的,即在使用该组件时必须传递这个属性。},}
}

3、子组件访问 Props

<template><div class="pagination"><el-pagination @size-change="handleSizeChange" @current-change="handleCurrentChange":page-sizes="pagination.pageSizes?pagination.pageSizes:[5, 10, 20, 30, 40, 50]":page-size.sync="pagination.pageSize":current-page.sync="pagination.current":pagerCount="pagerCount":small="small":layout="layout":total="pagination.total"></el-pagination></div>
</template><script>export default {name: 'common-page',props: {pagination: {type: Object,required: true,},layout: {type: String,default: 'total, sizes, prev, pager, next, jumper',},small: {type: Boolean,default: false,},pagerCount: {type: Number,default: 7},},mounted() {console.log(this.pagination, this.pagerCount)}}
</script>

二、单向数据流

概念

单向数据流,指的是父组件将数据通过 props 传递给子组件后,父组件更新数据, 子组件 props 的数据会同步更新,但是,反过来则不行,子组件不能修改 props 数据。

当父组件将数据传递给子组件后,父组件如果更新数据,子组件会同步更新,但是,子组件中不能修改 props 接收的数据。

结论:子组件中不能修改 Prop 的数据

解决方案

如果确实有需要修改 props 的要求,可以有如下两种解决方案:

1、将 props 赋值给 data
export default {props: {pagination: {type: Object,required: true,},},data() {return {sonPagination: this.pagination}}
}
2、将 props 赋值给 computed
export default {props: {pagination: {type: Object,required: true,},},computed: {sonPagination() {return this.pagination}}
}

三、Prop 的验证

  export default {props:{name:String,age: [Number,String],num:{type:Number,    //类型required:true,  // true为必传},gender:{type:String,default:"保密" //默认值},// 如果默认值是数组或对象friends:{type:Array,default: ()=>["张三","李四"],},teacher:{type:Object,default:()=>({name:"王五"}),},classes:{validator(value){return ['web21','web22','web23'].includes(value)}}}}

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

相关文章:

  • Apache Commons Text 指南:比 String 更强大的文本处理工具
  • C++面向对象编程学习
  • 云轴科技ZStack亮相迪拜GITEX大会,与阿里云再次携手深化海外合作
  • SQL Server 当前日期及其未来三天的日期
  • QUIC(Quick UDP Internet Connections)与 RTMP(Real Time Messaging Protocol)
  • 双十一送你一份购物攻略,绿联NAS DXP2800评测
  • 基于vue框架的的高校设备信息管理系统的设计与实现tx6d7(程序+源码+数据库+调试部署+开发环境)系统界面在最后面。
  • springboot3.x使用@NacosValue无法获取配置信息问题解决
  • sql获取时间差
  • 【深入理解Python中的闭包】如何有效使用嵌套函数和状态捕获!
  • npm配置阿里镜像库教程
  • Apache JMeter压力测试工具使用
  • 前端零基础入门到上班:【Day4】HTML 多媒体与表单深度教程
  • 原创作品——银行软件产品界面设计
  • 若依RuoYi-Vue 定时任务 速学
  • 【pytest学习】pytest.main()
  • 设计模式: Pimpl(Pointer to Implementation)
  • android开发中文网站 android developer
  • 实习冲刺Day1
  • 安全见闻(5)——开阔眼界,不做井底之蛙
  • Navicat 安装
  • 解读 Java 经典巨著《Effective Java》90条编程法则,第2条:遇到多个构造器参数时要考虑使用构建器
  • 拉丁美洲有望成为全球电商的新蓝海!
  • VScode远程开发之remote 远程开发(二)
  • 基于Python+SQL Server2008实现(GUI)快递管理系统
  • png格式图片怎么改成jpg?超好用的8种转换方法介绍!
  • Idea基于JRbel实现项目热部署修改Java、Xml文件无需重启项目
  • 【如何获取股票数据17】Python、Java等多种主流语言实例演示获取股票行情api接口之沪深A股近年增发数据获取实例演示及接口API说明文档
  • 导出BERT句子模型为ONNX并推理
  • Unity Apple Vision Pro 自定义手势识别交互