vue2.0 父子组件数据传递prop
vue的一个核心概念就是组件,而组件实例的作用域是孤立的,所以组件之间是不能直接引用其他组件的数据的。极端点举例来说,就是可以在同一个项目中,每一个组件内都可以定义相同名称的数据。
data () {
return {
msg: "Hello Vue2.0.js"
}
}
比如每个组件我们都定义一个msg,当我们使用msg的时候,使用的都是各自组件内部的msg,而不会互相干扰。
而如果父子组件当中,如果需要实现数据的传递,父组件的数据需要通过 prop 才能下发到子组件中,子组件要显式地用props选项声明它预期的数据。
<photo-item
v-for="(item, index) in rightLists.item"
:key="item.id"
:item="item"
@del="del">
</photo-item>
以<photo-item />子组件为例,在父组件当中调用<photo-item /> 通过prop显示传递item,也就是“:item='item'”,在子组件当中,显示声明props
props: ["item"]
就可以获取到父组件传递过来的item对象,同时prop可以提供指定验证规则。如果传入的数据不符合要求,Vue 会发出警告。
props: {
'item':{
type: Object,
required: true
}
},
使item成为一个对象,type指定传递过来的item数据类型,可以以数组方式指定多种数据类型,required指定是否为必传,default指定默认值,validator是自定义一个验证函数。
如果你想把一个对象的所有属性作为 prop 进行传递,可以使用不带任何参数的 v-bind。
<template>
<child-comp v-bind="item"></child-comp>
</template>
import ChildComp from "./components/ChildComp.vue"
export default{
data () {
return {
item: {
text: "欢迎使用vue",
version:"2.0"
}
}
},
components:{
ChildComp
},
}
此时在子组件当中,使用props显示接收的就是text和version,而与名义上的item已经没有什么关系了。
export default{
props: ["text", "version"]
}
在子组件当中如果需要改变父组件传递过来的数据,并且传递会去,则需要使用到vue 的自定义事件系统。
在子组件当中绑定事件,通过$emit通知父组件。
子组件的实现过程:
<template>
<div @click="changeText">
{{hello}}
<hr>
{{version}}
</div>
</template>
<script>
export default{
data(){
return{
hello: this.text
}
},
props: ["text", "version"],
methods:{
changeText(){
this.hello = "我需要改变传递过来的text,并且通知父组件当中的数据";
this.$emit("changedComppText")
}
}
}
</script>
通过事件changeText,实现子组件的事件变化,在函数changeText内部通过 this.$emit("changedComppText") 向父组件报告自己的内部事件,在父组件当中,通过自定义事件
<child-comp v-bind="item" @changedComppText = "beChanged"></child-comp>
然后在methods中定义方法beChanged,从而实现父组件当中的数据变化,来同步实现子组件的数据变化。其中$emit还有第二个payload参数通知变化结果。
vue2.0 父子组件数据传递prop的更多相关文章
- vue2.0 兄弟组件数据传递方法
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- React中父子组件数据传递
Vue.js中父子组件数据传递:Props Down , Events Up Angular中父子组件数据传递:Props Down, Events Up React中父子组件数据传递:Prop ...
- Vue2.0父子组件之间和兄弟组件之间的数据交互
熟悉了Vue.js的同级组件之间通信,写此文章,以便记录. Vue是一个轻量级的渐进式框架,对于它的一些特性和优点,请在官网上进行查看,不再赘述. 使用NPM及相关命令行工具初始化的Vue工程,目录结 ...
- 关于vue.js父子组件数据传递
vue.js中使用props down,events up的原则进行父子组件间的通信,先来记录下props down,看个例子: <div id="app2"> < ...
- Vue2.0父子组件间事件派发机制
从vue1.x过来的都知道,在vue2.0中,父子组件间事件通信的$dispatch和$broadcase被移除了.官方考虑是基于组件树结构的事件流方式实在是让人难以理解,并且在组件结构扩展的过程中会 ...
- vue2.0父子组件以及非父子组件通信传参详解
1.父组件传递数据给子组件 父组件数据如何传递给子组件呢?可以通过props属性来实现 父组件: <parent> <child :child-msg="msg" ...
- vue2.0父子组件以及非父子组件如何通信
1.父组件传递数据给子组件 父组件数据如何传递给子组件呢?可以通过props属性来实现 父组件: <parent> <child :child-msg="msg" ...
- vue2.0父子组件之间通信
父组件是通过props属性给子组件通信的来看下代码: 父组件: <parent> <child :child-com="content"></chil ...
- Vue2.0父子组件之间的双向数据绑定问题解决方案
对于vue 1.0项目代码,如果把vue换成vue 2.0,那么之后项目代码就完全奔溃不能运行,vue 2.0在父子组件数据绑定的变化(不再支持双向绑定)颠覆了1.0的约定,很遗憾. 解决方案只有两种 ...
随机推荐
- MongoDB 设置账号和密码
一.安装MongoDB 1.环境配置: i.操作系统:CentOS release 6.8 (Final) [root@iZ2ze2pbbffhmn53ao4tuaZ bin]# cat /etc/r ...
- Java 笔试题(一)
应聘Java笔试时可能出现问题及其答案 Java基础方面: 1.作用域public,private,protected,以及不写时的区别 答:区别如下: 作用域 当前类 同一package 子孙类 ...
- mysql 删除数据库中所有的表中的数据,只删database下面所有的表。
select concat('drop table ',table_name,';') from TABLES where table_schema='数据库名称'; select concat('t ...
- 前端实现在线预览pdf、word、xls、ppt等文件
最近在做一个公司的资源管理系统,一些知识小记一下. 1.前端实现pdf文件在线预览功能 方式一.pdf文件理论上可以在浏览器直接打开预览但是需要打开新页面.在仅仅是预览pdf文件且UI要求不高的情况下 ...
- mongoVUE的增删改查操作使用说明(转)
mongoVUE连接数据库 http://jingyan.baidu.com/album/9989c7460fd171f648ecfe06.html?picindex=1 mongoVUE操作数据库 ...
- 两招解决异常_Cannot find any information on property 'XXX' in a bean of type 'XXX'的问题
第一招 在进行Java Web项目开发的时候,我碰到过下面这个异常: Cannot find any information on property 'XXX' in a bean of type ' ...
- 黄聪:wordpress教程
又一个作品完成!<跟黄聪学Wordpress主题开发>,国内最好的Wordpress主题模版开发视频教程!! 目录预览: WordPress官方源文件层式结构讲解 WordPress数据库 ...
- 【mysql】索引优化记录
基础知识 Innodb存储引擎 支持行锁 支持事务: Myisam存储引擎 只支持表锁: 不支持事务: 常见索引列表 独立的列 前缀索引(索引选择性) 多列索引(并不是多个单列索引,索引顺序很重要) ...
- Ubuntu 14.10 下HBase错误集
1 如果机群时间不同步,那么启动子节点RegionServer就会出问题 aused by: org.apache.hadoop.hbase.ipc.RemoteWithExtrasException ...
- FB工作流相关
1.初始化项目 gitlab上建立一个仓库 在命令行中运行git clone,将仓库克隆到本地 在命令行中找到前端模版文件(模版文件夹(front-template)有个sao.js脚本,用来在本地按 ...