1 简介

  props主要用于组件的传值,他的工作就是为了接收外面传过来的数据,与data、el、ref是一个级别的配置项

2 一个简单示例

1)StudentComp.vue

<template>
<div>
<h1>{{stname}}</h1>
      <h1>{{age}}</h1>
    </div>

</template>

<script>
export default {
name:'StudentComp',
data(){
return {
stname:'学生' ,
           age:18
            }
}
}
</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的更多相关文章

  1. Vue中用props给data赋初始值遇到的问题解决

    Vue中用props给data赋初始值遇到的问题解决 更新时间:2018年11月27日 10:09:14   作者:yuyongyu    我要评论   这篇文章主要介绍了Vue中用props给dat ...

  2. vue & watch props

    vue & watch props bug OK watch: { // props // chatObj: () => { // // bug // log(`this.chatObj ...

  3. [转]Vue中用props给data赋初始值遇到的问题解决

    原文地址:https://segmentfault.com/a/1190000017149162 2018-11-28更:文章发布后因为存在理解错误,经@Kim09AI同学提醒后做了调整,在此深表感谢 ...

  4. Vue computed props pass params

    Vue computed props pass params vue 计算属性传参数 // 计算 spreaderAlias spreaderAlias () { console.log('this. ...

  5. vue & components & props & methods & callback

    vue & components & props & methods & callback demo solution 1 & props & data ...

  6. vue & modal props & form data update bug

    vue & modal props & form data update bug OK <div> <BindModal :dialogBindVisible=&qu ...

  7. vue之props父子组件之间的谈话

    眨眼就来杭州两年了,时间真快. 我们今天来说说vue的一个api---->props 首先我们先看看一个例子,是我一个项目中写的. 看到这个:有木有一点懂了.要是没懂,继续往下看 这里我们用到了 ...

  8. vue的props和$attrs

    过去我们在vue的父子组件传值的时候,我们先需要的子组件上用props注册一些属性: <template> <div> props:{{name}},{{age}} 或者 {{ ...

  9. vue学习--Props

    Props:        props用以从父组件接收数据:                     使用:                Vue.component('child',{        ...

  10. vue使用props动态传值给子组件里的函数用,每次更新,呼叫函数

    父组件 <template> <div id="app"> <div>详情内容</div> <button v-on:clic ...

随机推荐

  1. IIS 配置集中式证书模块实现网站自动绑定证书文件

    在 Windows 环境下如果采用 IIS 作为 网站服务器时,常规的网站绑定 HTTPS 需要一个一个站点手动选择对应的证书绑定,而且证书过期之后更换证书时也是需要一个个重新绑定操作,无法便捷的做到 ...

  2. SQL-GROUP BY语句在MySQL中的一个错误使用被兼容的情况

    首先创建数据库hncu,建立stud表格. 添加数据: create table stud(sno varchar(30) not null primary key,sname varchar(30) ...

  3. 读书笔记:A Philosophy of Software Design

    今天一位同事在斯坦福的博士生导师John Ousterhout (注,Tcl语言的设计者)来公司做了他的新书<A Philosophy of Software Design>的演讲,介绍了 ...

  4. JUnit 5 单元测试教程

    点赞再看,动力无限. 微信搜「程序猿阿朗 」. 本文 Github.com/niumoo/JavaNotes 和 未读代码博客 已经收录,有很多知识点和系列文章. 在软件开发过程中,我们通常都需要测试 ...

  5. Zookeeper的服务器的log4j升级为log4j2的升级方案(忽略配置化兼容问题)

    参考在线markdown编辑器: http://marxi.co/ Zookeeper的服务器的log4j升级为log4j2的升级方案(忽略配置化兼容问题) 目前希望可以升级将Zookeeper中lo ...

  6. 缓存管理器CacheManager使用

    缓存管理器CacheManager 一.背景 ​ 代码并发量因建行活动页上升,大量请求打到Mongo导致数据库cpu100%从而服务不可用,目前解决方案,使用编程式缓存,即对缓存的操作与业务代码耦合. ...

  7. ExcelToObject.NPOI 两行代码导出Excel报表、读取Excel数据

    简介 作为一个dotnet开发者,经常面对业务系统中大量报表导入导出,经常写了一堆的重复代码.最近发现一个操作excel的神器:ExcelToObject.NPOI,两行代码就能导出一个报表,两行代码 ...

  8. 可视化软件Navicat,python操作MySQL

    可视化软件Navicat 第三方开发的用来充当数据库客户端的简单快捷的操作界面 无论第三方软件有多么的花里胡哨,底层的本质还是SQL 能够操作数据库的第三方可视化软件有很多,其中针对MySQL最出名的 ...

  9. js的基本数据类型和引用数据类型及深拷贝浅拷贝

    1.栈(stack)和堆(heap) stack为自动分配的内存空间,它由系统自动释放:而heap则是动态分配的内存,大小也不一定会自动释放 2.js数据类型分两种 (1)基本数据类型(值类型):Nu ...

  10. error: expected ‘)’ before ‘PRIx64’

    打印uint64时编译报错 printf("prefix:0x%"PRIx64"\n",ipv6Prefix); 解决办法:添加头文件 #include < ...