Vue 组件&组件之间的通信 之 父组件向子组件传值
父组件向子组件传值:父组件通过属性向下传值的方式和子组件通信;
使用步骤:
定义组件:现有自定义组件com-a、com-b,com-a是com-b的父组件;
准备获取数据:com-b要获取父组件data中的name属性;
在<com-b :name=“name”></com-b> 使用v-bind 绑定name属性,红色部分为属性名称,可以随意写。
在子组件定义部分里添加选项,值是个字符串数组 props:[‘name’],将上边红色的属性名称写在这里;
之后就可定义在子组件中使用name属性了;
现在就来解决上一篇博文提出的问题吧,让父组件与子组件进行通信:

vue代码:
<template id="father-template">
<div>
<h2> 父组件</h2>
username:<span>{{name}}</span>
<hr />
<child-component :name="name"></child-component>
</div>
</template>
<template id="child-template">
<div>
<p> 子组件</p>
fatherData:<span >{{name}}</span> </div>
</template>
<script> new Vue({
components:{
"father-component":{
data(){
return{
name:'perfect'
}
},
template:'#father-template', components:{
"child-component":{ template:'#child-template',
props:['name']
}
}, }
} }).$mount('div');
</script>
由图可知子组件已经可以和父组件进行通信了,因为共用了属性name
现在我们就来测试一下调用父组件的多个属性,以及对属性值的绑定,可以进行观测数据的变化

该效果图的vue代码:
<template id="father-template">
<div>
<h2> 父组件</h2>
myData:<span>{{name}},{{id}},{{user.username}}</span><br />
fatherData:<span>{{msg}}</span><br />
<input type="text" v-model="name"/>
<hr />
<child-component :name="name" :id='id' :user='user'></child-component>
</div>
</template>
<template id="child-template">
<div>
<p> 子组件</p>
fatherData:<span >{{name}},{{id}},{{user.username}}</span> </div>
</template>
<script> new Vue({ data:{
msg:"欢迎来到perfect*的博客园!!!"
},
components:{
"father-component":{
data(){
return{
id:,
name:'perfect',
user:{ username:'博客园---perfect*',
password:'' }
}
},
props:['msg'],
template:'#father-template', components:{
"child-component":{ template:'#child-template',
props:['name','id','user']
}
}, }
} }).$mount('div');
</script>
html:
<div>
<father-component :msg="msg"></father-component>
</div>
father-component的父组件是body,由于属性msg是全局的,所以需要使用的时候,需要进行绑定
props选项高级配置
详细介绍prop网址:https://cn.vuejs.org/v2/guide/components-props.html
在上面的props的使用是字符串数组
props:['name','id','user']
props 可以是数组或对象,用于接收来自父组件的数据。props 可以是简单的数组,或者使用对象作为替代,对象允许配置高级选项,如类型检测、自定义验证和设置默认值。
对象的形式:
props:{
name:String,
id:Number,
user:Object
}

components:{
"father-component":{
data(){
return{
id:"",
name:'perfect',
user:{
username:'博客园---perfect*',
password:''
}
}
},
结果虽然显示出来了,但是控制台报错误了,错误显示,id的类型检测错误,它是number类型,不是一个字符串类型
解决方法:
props:{
name:String,
id:[Number,String],
user:Object
}
在props中每一个属性都可以定义成对象的类型:
props:{
name:{
type:String,
required:true//必须进行传值
},
id:[Number,String],
user:Object
}
}
当把组件中的name删除时,会出现下面这样的错误:
<child-component :id='id' :user='user'></child-component>

解决方法:我们可以通过在name对象中定义一个属性default
props:{
name:{
type:String,
//required:true,//必须进行传值
default:'perfect*'//定义一个默认值
},
id:[Number,String],
user:Object
}
}
},

这样控制台就没有错误了
接下来为user对象设置一个默认值
<child-component :id='id' ></child-component>
props:{
name:{
type:String,
//required:true,//必须进行传值
default:'perfect*'//定义一个默认值
},
id:[Number,String],
user:{
type:Object,
default:function(){
return {username:'perfect***',password:''}
}
}
}
}
},

数据校验
当定义一个属性age:18时,初始效果

校验demo:
props:{
name:{
type:String,
//required:true,//必须进行传值
default:'perfect*'//定义一个默认值
},
id:[Number,String],
user:{
type:Object,
default:function(){
return {username:'perfect***',password:''}
}
},
age:{
type:Number,
validator: function (value) {
return value>=;
}
}
}
}
},
<child-component :id='id' :age='age'></child-component>
当age=-18时:
会进行自动校验,见控制台:

Vue 组件&组件之间的通信 之 父组件向子组件传值的更多相关文章
- Vue父子组件通信(父级向子级传递数据、子级向父级传递数据、Vue父子组件存储到data数据的访问)
Vue父子组件通信(父级向子级传递数据.子级向父级传递数据.Vue父子组件存储到data数据的访问) 一.父级向子级传递数据[Prop]: ● Prop:子组件在自身标签上,使用自定义的属性来接收外界 ...
- artdialog4.1.7 中父页面给子页面传值
artdialog4.1.7中父页面给子页面传值时看了一些网友的解决方法: 在父页面声明全局变量 var returnValue=“ ”,子页面用art.dialog.opener.returnVal ...
- layer.open中父页面向子页面传值
1.咱先看图说话 父list.jsp 子operate.jsp实现的代码1 在父页面上完成对子页面的数据渲染 function setData(data) { var lay=layer.open({ ...
- vue $emit 父组件与子组件之间的通信(父组件向子组件传参)
1.首先新建一个子页面为 env.vue的文件(名字这里大家可以自取) 2.然后把子页面引入父页面,代码如图: import env from '@/components/common/env' ex ...
- vue中父级与子组件生命周期的先后顺序
1.vue的生命周期 2.views/createrCustormer.vue为父级 <template> <expressService /> </ ...
- vue 项目, 通知子组件更新,父组件中每次点击按钮重新加载子组件,(重新生成dom 元素)
vue是组件化开发的项目,很多情况下会把公共组件提取出来,来减少代码量,提高开发效率,和以后更好的可维护性.很多情况下,父组件中都会引用子组件这种情况.通过给在父组件中引用的子组件标签上添加属性,来渲 ...
- vue组件父子之间相互通信案例
- vue2 父链,子组件索引及父子通信的props对象写法
- vue单文件组件形成父子(子父)组件之间通信(vue父组件传递数据给子组件,子组件传递数据给父组件)
看了很多文章,官网文档也有看,对父子组件通信说的不是很明白:决定自己总结一下: vue一般都使用构建工具构建项目:这样每个组件都是单文件组件:而网上很多文章都是script标签方式映入vue,组件通信 ...
随机推荐
- js数组指定位置添加删除
示例参考:http://www.w3school.com.cn/jsref/jsref_splice.asp
- 【蓝桥杯真题】地宫取宝(搜索->记忆化搜索详解)
链接 [蓝桥杯][2014年第五届真题]地宫取宝 题目描述 X 国王有一个地宫宝库.是 n x m 个格子的矩阵.每个格子放一件宝贝.每个宝贝贴着价值标签. 地宫的入口在左上角,出口在右下角. 小明被 ...
- C语言:二进制模5
输入一串字符,若是二进制则求其模五的值. 要求:1.若输入的字符包含除0.1以外的值,则输出:invalid 2.若输入的为二进制字符串,则输出所计算的其模五的值 3.若其输入字符均为0.1,但是第一 ...
- 软件工程第二次作业-VSTS单元测试
一.选择开发工具 开发工具选择 Visual studio 2017 社区版,开发语言为C 由于之前已经安装完毕,所以不上传安装过程,主界面如下: 二.练习自动单元测试 使用的测试工具是VSTS,具体 ...
- rabbit_mq实现分布式事务
gitlab下载地址: 一.rabbitmq实现原理 一般在自己内部系统中建议采用lcn刚性事务来处理,面对调用第三方接口,或者夸平台语言是采用消息中间来实现补偿型事务.注意在进行补偿时需要注意重复调 ...
- python摸爬滚打之day032 管道 数据共享 进程池
1.进程池 当有成千上万个任务需要被执行的时候,有了进程池我们就不必去创建大量的进程. 首先,创建进程需要消耗时间,销毁进程(空间,变量,文件信息等等的内容)也需要消耗时间, 第二即便开启了成千上万的 ...
- atmega16功耗实测
晶振32.768K 电压 电流 1.82 10ua 2.00 15ua 2.5 28ua 3.3 ...
- Windows Server 2012 R2服务器部署Tomcat JDK、安装Mysql以及将Java项目部署到CVM
我们平时所调试的Java Web 项目需要在本地Eclipse或者MyEclipse当中开发调试,并且部署到Tomcat上来测试,比如说笔者这里用的eclipse添加tomcat服务器, 但是这里发布 ...
- loj2083 优秀的拆分 [NOI2016] SA
正解:SA 解题报告: 我永远喜欢loj! 显然$AABB$串相当于是由两个$AA$串拼起来的,所以可以先考虑如果求出来了所有$AA$串怎么求答案? 就假如能统计出$st[i]$表示所有以$i$为开头 ...
- Spark 学习笔记
Spark的前世今生 基础语法详解 3.条件控制与循环 4.函数入门 5.函数入门之默认参数 6.函数入门之边长参数 7.函数入门之过程lazy值和异常 8.数组操作之Ar ...