Vue学习第15天——props配置项详解
2023-09-11 14:21:26 时间
目录
一、props概念
1、作用
让组件接收外部传过来的数据
2、适用场景
父子组件通信
3、三种书写方式
① 只接收:props:["name"]
;
② 限制类型:props:{name:String}
;
③ 限制类型,限制必要性,指定默认值:props:{name:{type:string,required:true}}
二、案例演练
1、父组件向子组件传递数据
父组件向子组件传递数据(非函数),本质是父向子传递数据
父组件
<template>
<div id="app">
<h3>通过props实现父向子传数据</h3>
<Student :sendName="name"/>
</div>
</template>
<script>
import Student from './components/Student.vue'
export default {
name: 'App',
data(){
return {
name:"憨瓜",
}
},
components: {Student},
}
</script>
子组件
<template>
<div>
<p>学生姓名是:{{sendName}}</p>
</div>
</template>
<script>
export default {
name:"Student",
props:["sendName"],
}
</script>
运行结果
2、子组件向父组件传递数据
父组件给子组件传递数据(函数):本质其实是子组件给父组件传递数据
父组件
<template>
<div id="app">
<h3>通过props配置项得到学校的名称是:{{sName}}</h3>
<School :getName="getName"/>
</div>
</template>
<script>
import School from './components/School.vue'
export default {
name: 'App',
data(){
return {
sName:""
}
},
components: {School},
methods:{
getName(name){
this.sName=name
}
}
}
</script>
子组件
<template>
<div>
<p>学校名称:{{name}}</p>
<p>学校地址:{{adress}}</p>
<button @click="sendName">通过props实现子向父传递数据</button>
</div>
</template>
<script>
export default {
name:"School",
data(){
return {
name:"喵喵学院",
adress:"郑州"
}
},
props:["getName"],
methods:{
sendName(){
this.getName(this.name)
}
}
}
</script>
运行结果
三、进阶学习
1、props与data中属性名相同
父组件
<template>
<div id="app">
<h3>props与data中数据属性名相同时</h3>
<Student :sendName="name"/>
</div>
</template>
<script>
import Student from './components/Student.vue'
export default {
name: 'App',
data(){
return {
name:"憨瓜",
}
},
components: {Student},
}
</script>
子组件
<template>
<div>
<p>学生姓名是:{{sendName}}</p>
</div>
</template>
<script>
export default {
name:"Student",
//data中的name与props传递的一样
data(){
return {
sendName:"波妞",
}
},
props:["sendName"],
}
</script>
运行结果
结论:控制台警告,但运行结果优先级:props > data
2、修改props传入的数据
父组件
//代码用上面1中的父组件的代码即可
子组件
<template>
<div>
<p>学生姓名是:{{sendName}}</p>
<button @click="changeName">点击修姓名</button>
</div>
</template>
<script>
export default {
name:"Student",
props:["sendName"],
methods:{
//修改父组件传进来的数据
changeName(){
this.sendName="波妞";
}
}
}
</script>
运行结果
结论:props是单向数据流
,修改props中的数据页面会更改,但控制台会警告
3、正确修改props方法
复制props中的数据到data中一份,然后去修改data中的数据
<template>
<div>
<p>学生姓名是:{{cName}}</p>
<button @click="changeName">点击修姓名</button>
</div>
</template>
<script>
export default {
name:"Student",
//1、将props中的数据复制到data中
data(){
return {
cName:this.sendName,
}
},
props:["sendName"],
methods:{
//2、修改data中的数据
changeName(){
this.cName="波妞"
}
}
}
</script>
运行结果
四、总结
1、如果父组件给子组件传递数据(非函数): 本质其实是父组件给子组件传递数据
2、如果父组件给子组件传递数据(函数):本质其实是子组件给父组件传递数据
3、如果props中的属性和data中的属性相同,那么显示的为props中的属性,优先级:props > data
,但控制台会发出警告
4、props是单向数据流,默认是只读的
5、vue底层会监视到我们对props的修改,如果进行了修改,页面显示修改的数据,但控制台会发出警告,如业务需求确实要改,那么要复制props的内容到data中一份,然后修改data中的数据
相关文章
- 使用Vue-cli 脚手架生成的项目使用Vetur+ Prettier + ESlint的配置设置代码规范和格式
- vue-cli-3.0 axios 安装和配置
- vue-cli3.0 使用postcss-plugin-px2rem(推荐)和 postcss-pxtorem(postcss-px2rem)自动转换px为rem 的配置方法;
- vue.config.js常用配置详解
- [Vue @Component] Define Props on a Vue Class with vue-property-decorator
- vue3:vue+nginx+php进行服务端部署的配置(nginx/1.18.0 / vue@3.2.37)
- vue-cli项目配置图解
- vue框架-基础6-vue-调用后端接口,axios使用,跨域问题
- vue.js3: 从详情页返回列表页,显示跳转前列表而不是第一页(vue@3.2.26)
- npm升级自身和@vue/cli (node v14.17.1)
- django-vue-admin前端设置后台接口地址为127.0.0.1产生跨域问题解决办法
- standalone vue initialization process - Vue应用的初始化过程
- vue中mixins和组件的区别和用法
- Vue中的baseurl怎么配置
- npm install vue@next安装最新vue版本
- Vue CLI 4.x安装成功,但是无法运行vue-V等指令。报错vue -V 不是内部或外部命令,也不是可运行的程序或批处理文件解决方案!!!
- Vue+ElementUI项目使用webpack输出MPA
- vue cli脚手架 - 删除配置好的自定义预配置
- 计算机毕设 SSM Vue的疫情防控物业管理系统
- 在Vue中使用Avue、配置过程以及实际应用
- Springboot+Vue实现将图片和表单一起提交到后端,同时将图片地址保存到数据库、再次将存储的图片展示到前端vue页面
- 196:vue+openlayers 滑动某feature高亮,修改此feature的样式
- 047:vue+openlayers:双击鼠标显示品牌代言人名片(示例代码)
- ECharts用法及常用配置项详解(Vue环境)
- 基于Java+SpringBoot+Vue企业资源规划系统设计与实现
- vue项目配置打包测试环境/生产环境
- Vue:第一个vue-cli项目
- Vue学习笔记——vue-router