Vue 24 props
1 简介
props主要用于组件的传值,他的工作就是为了接收外面传过来的数据,与data、el、ref是一个级别的配置项
2 一个简单示例
1)StudentComp.vue
<template>
<div>
<h1>{{stname}}</h1>
</div> </template> <script>
export default {
name:'StudentComp',
data(){
return {
stname:'学生' ,
}
}
}
</script>
2)SchoolComp.vue
<template>
<div>
<h1 >{{schoolname}}</h1>
<StudentComp></StudentComp>
</div>
</template> <script>
import StudentComp from './StudentComp' export default {
name:'SchoolComp',
data(){
return {
schoolname:'实验小学1'
}
},
components:{
StudentComp
}
}
</script> <style> </style>
3)app.vue
<template>
<div>
<SchoolComp></SchoolComp> </div>
</template> <script> import SchoolComp from './components/SchoolComp' export default {
name:'App',
components:{
SchoolComp
}
} </script>

页面效果

3 一个需求引出props
在上面示例的基础上,要求StudentComp组件里面的stname和age不是固定的,而是引用StudentComp组件的那个组件来决定值,这时候可以使用props属性
1)修改StudentComp.vue,添加props属性,去掉data里面的stname和age值
<template>
<div>
<h1>{{stname}}</h1>
<h1>{{age}}</h1>
</div> </template> <script>
export default {
name:'StudentComp',
data(){
return { }
},
props:['stname','age']
}
</script>
2)修改SchoolComp.vue,在StudentComp 标签添加stname和age属性,就可以把值传到StudentComp里面去了
<template>
<div>
<h1 >{{schoolname}}</h1>
<StudentComp stname="学生" age="18" ></StudentComp>
</div>
</template> <script>
import StudentComp from './StudentComp' export default {
name:'SchoolComp',
data(){
return {
schoolname:'实验小学1'
}
},
components:{
StudentComp
}
}
</script> <style> </style>
3)效果


4 props的三种写法
4.1 最简数组写法
只定义参数名
props:['stname','age']
4.2 对象写法
定义参数名和类型
props:{
stname:String,
age:number
}
4.3 完整写法
可定义类型,是否必传,默认值
props: {
stname: {
type: String, // 类型
required: true,// 必要性
default: 'cess'// 默认值
},
age:{
type: Number, // 类型
required: true,// 必要性
default: 18// 默认值
}
}
5 关于非字符串类型传值的问题
1) StudentComp.vue
<template>
<div>
<h1>{{stname}}</h1>
<h1>{{age}}</h1>
</div> </template> <script>
export default {
name:'StudentComp',
data(){
return { }
},
props: {
stname: {
type: String, // 类型
required: true,// 必要性
default: 'cess'// 默认值
},
age:{
type: Number, // 类型
required: true,// 必要性
default: 18// 默认值 }
}
}
</script>
2) SchoolComp.vue
<template>
<div>
<h1 >{{schoolname}}</h1>
<StudentComp stname="学生" age="18" ></StudentComp>
</div>
</template> <script>
import StudentComp from './StudentComp' export default {
name:'SchoolComp',
data(){
return {
schoolname:'实验小学1'
}
},
components:{
StudentComp
}
}
</script> <style> </style>
3)效果
发现{{age + 1}}在页面显示181,因为18它是字符串,age+1就是字符串拼接,就是181了

4 ) 问题
发现控制台报错,因为SchoolComp.vue那里通过属性传值,age="18",它会认为18是个字符串,页面就是181了

5)解决方案
通过v-bind来设置age属性 :age="18",这样子,age属性里面的18会被按照表达式来解析,18就会作为数字了
<StudentComp stname="学生" :age="18" ></StudentComp>
6)效果

6 props和data里面属性不允许重名
因为props和data里面的属性都会在组件对象上面,所以是不允许重名的
在StudentComp.vue的data里面加一个属性stname,启动报错
<template>
<div>
<h1>{{stname}}</h1>
<h1>{{age + 1}}</h1>
</div> </template> <script>
export default {
name:'StudentComp',
data(){
return {
'stname':'小学生'
}
},
props: {
stname: {
type: String, // 类型
required: true,// 必要性
default: 'cess'// 默认值
},
age:{
type: Number, // 类型
required: true,// 必要性
default: 18// 默认值 }
}
}
</script>

7 props里面的属性的值的修改
7.1 在StudentComp里面修改
添加一个按钮
点击事件中去修改age的值
<template>
<div>
<h1>{{stname}}</h1>
<h1>{{age + 1}}</h1>
<button v-on:click="cli">点击</button>
</div> </template> <script>
export default {
name:'StudentComp',
data(){
return { }
},
props: {
stname: {
type: String, // 类型
required: true,// 必要性
default: 'cess'// 默认值
},
age:{
type: Number, // 类型
required: true,// 必要性
default: 18// 默认值 }
},
methods: {
cli(){
this.age = 20
}
}
}
</script>
发现报错,子组件默认不能修改父组件传的props值

7.2 SchoolComp里面修改
添加一个按钮
点击事件中去修改age的值
<template>
<div>
<h1 >{{schoolname}}</h1>
<StudentComp stname="学生" :age="age" ></StudentComp> <button v-on:click="cli">点击</button>
</div>
</template> <script>
import StudentComp from './StudentComp' export default {
name:'SchoolComp',
data(){
return {
schoolname:'实验小学1',
age:18
}
},
components:{
StudentComp
},methods: {
cli(){
this.age = 20
}
}
}
</script> <style> </style>

点击按钮,值改变

在传值的组件中可以修改
Vue 24 props的更多相关文章
- Vue中用props给data赋初始值遇到的问题解决
Vue中用props给data赋初始值遇到的问题解决 更新时间:2018年11月27日 10:09:14 作者:yuyongyu 我要评论 这篇文章主要介绍了Vue中用props给dat ...
- vue & watch props
vue & watch props bug OK watch: { // props // chatObj: () => { // // bug // log(`this.chatObj ...
- [转]Vue中用props给data赋初始值遇到的问题解决
原文地址:https://segmentfault.com/a/1190000017149162 2018-11-28更:文章发布后因为存在理解错误,经@Kim09AI同学提醒后做了调整,在此深表感谢 ...
- Vue computed props pass params
Vue computed props pass params vue 计算属性传参数 // 计算 spreaderAlias spreaderAlias () { console.log('this. ...
- vue & components & props & methods & callback
vue & components & props & methods & callback demo solution 1 & props & data ...
- vue & modal props & form data update bug
vue & modal props & form data update bug OK <div> <BindModal :dialogBindVisible=&qu ...
- vue之props父子组件之间的谈话
眨眼就来杭州两年了,时间真快. 我们今天来说说vue的一个api---->props 首先我们先看看一个例子,是我一个项目中写的. 看到这个:有木有一点懂了.要是没懂,继续往下看 这里我们用到了 ...
- vue的props和$attrs
过去我们在vue的父子组件传值的时候,我们先需要的子组件上用props注册一些属性: <template> <div> props:{{name}},{{age}} 或者 {{ ...
- vue学习--Props
Props: props用以从父组件接收数据: 使用: Vue.component('child',{ ...
- vue使用props动态传值给子组件里的函数用,每次更新,呼叫函数
父组件 <template> <div id="app"> <div>详情内容</div> <button v-on:clic ...
随机推荐
- 【翻译】Spring Security - 如何解决WebSecurityConfigurerAdapter类已被弃用的问题?
原文链接:Spring Security - How to Fix WebSecurityConfigurerAdapter Deprecated 原文作者:Nam Ha Minh 原文发表日期:20 ...
- Pwn学习随笔
Pwn题做题流程 使用checksec检查ELF文件保护开启的状态 IDApro逆向分析程序漏洞(逻辑复杂的可以使用动态调试) 编写python的exp脚本进行攻击 (若攻击不成功)进行GDB动态调试 ...
- 2流高手速成记(之九):基于SpringCloudGateway实现服务网关功能
咱们接上回 上一节我们基于Sentinel实现了微服务体系下的限流和熔断,使得整个微服务架构的安全性和稳定性上升了一个台阶 篇尾我们引出了一个问题,众多的微服务节点,我们如何部署才能满足客户端简洁高效 ...
- vue脚手架安装及依赖
一.安装Vue Cil (脚手架) 需要先安装node.js,这是node官网地址: https://nodejs.org/en/download/ ,node有两种版本一种是稳定版一种开发版 安装完 ...
- 轻松玩转sed
sed处理文本方法 1.文本或管道输入 2.读入一行到模式控件 3.sed命令处理 4.输出到屏幕 所以 sed是一个流处理编辑器 sed一次处理一行内容 sed不改变文件内容(可以通过重定向改变文件 ...
- github及git入门笔记
1 github https://github.com/ 1.1 github注册 进入官方 https://github.com/ 首页,点击如下图片中sign up按钮,按照提示信息注册即可. 注 ...
- “XZ”格式文件解压
1.下载xz 官网:https://tukaani.org/xz/ 例:wget https://nchc.dl.sourceforge.net/project/lzmautils/xz-5.2.6. ...
- Excel2010工作簿被锁定,无法复制或者新增加sheet表格。
Sub 工作簿密码破解() ActiveWorkbook.Sheets.Copy For Each sh In ActiveWorkbook.Sheets sh.Visible = True Next ...
- 【Java】FileUtils-获取路径的所有文件(或文件夹)
一.获取指定路径下的所有Excel文件 package com.boulderaitech.utils; import java.io.File; import java.util.Arrays; p ...
- 【Java进阶】五分钟快速掌握JVM优化概念、常用命令、工具、JUC、多线程、GC等知识
〇.概述 (一)资料 史上最全最详细的JVM优化方案:http://www.360doc.com/content/22/0513/10/34195792_1031121509.shtml (二)内容概 ...