vue的一大特色就是组件化,所以组件之间的数据交互是非常重要,而我们经常使用组件之间的通信的方法有:props,$refs和emit。

初识组件之间的通信的属性和方法

props的使用

子组件使用父组件的数据,使用vue的属性props。

当我们在父组件parent里面嵌套一个子组件son的时候,如果我们需要使用父组件的数据的时候,我们可以在子组件标签上面绑定一个属性,然后在子组件里面通过props来调用这个属性,就可以使用这个数据了。

//父组件

<sonPart :list="listDate"></sonPart>

//子组件

<div>{{list}}</div>
export default{
props:["list"]
}

props的数据类型

1,数组:当我们简单使用数据的时候,这时候props可以是一个数组的类型

props: ['list1','list2'.....]

2,对象:当我们要设置所使用的数据的类型、默认值等的时候,props就可以是一个Object类型

props: {
list1: {
type: Number/String/Boolean/Array/Object, //类型
default: function (){return}, //默认值
required: true/false //是否必填
}
}

$refs

vue有一个$refs属性,当只是组件的内容的时候,可以通过这个属性获得DOM元素,对这个DOM进行操作;如果是这个组件的子组件的时候,可以通过这个属性获得这个子组件对象,就可以访问这个组件里面的data与methods里面的内容了。(这时候取得子组件的数据一般是静态的)

$refs的使用

在DOM标签或者组件标签的时候,添加一个ref属性,ref="name"。

添加这个属性后,就可以通过this.$refs.name获得这个DOM元素或者子组件

//父组件

<son ref="children"><son>

export default {
mounted: {
//这时候就可以获得了这个子组件
let son = this.$refs.children
}
}

$emit

当父组件获取的数据,需用通过子组件来动作(click、change等)改变后数据,这时候我们通过ref是获取不到的,获取的也是改变前的数据。

因为emit绑定的事件触发的时候,附加参数都会传给监听器回调。所以数据就会改变

//父组件

//template部分
<sonPart @getList="enter"></sonPart> //js部分
import sonPart from './sonPar.vue';
export default{
data () {
radioData: ''
},
methods:{
enter:function(value){
this.radioData = value
}
},
components: {sonPart}
}
//子组件 <form @change="getData">
<label><input type="radio" v-model="dataList" value="0" name="list1">one</label>
<label><input type="radio" v-model="dataList" value="1" name="list1">two</label>
</form> export default{
data () {
dataList:''
},
methods:{
getData:function(){
this.$emit("getList",this.dataList);
}
}
}

$emit的参数

当我们使用的emit的时候,第一个参数为父组件使用方法名,后面一个参数为传递的数据。当数据有几个的时候,可以使用对象的形式传递参数。

methods: {
getData: function() {
this.$emit("getList",{name: this.dataList,value:"leo"[,....]}
}
}

站在巨人的肩膀上摘苹果:

https://blog.csdn.net/weixin_33813128/article/details/94177294

https://www.jb51.net/article/140581.htm

vue2.0嵌套组件之间的通信($refs,props,$emit)的更多相关文章

  1. vue2.0 父子组件之间的通信问题

    概要: 父组件向子组件通信:props属性 子组件向父组件通信:$emit()触发事件,$on()监听事件 在 vue 1.0 中可以使用$dispatch 和 $broadcast来实现 向上派发事 ...

  2. vue2.0父子组件之间通信

    父组件是通过props属性给子组件通信的来看下代码: 父组件: <parent> <child :child-com="content"></chil ...

  3. Vue2.0父子组件之间的双向数据绑定问题解决方案

    对于vue 1.0项目代码,如果把vue换成vue 2.0,那么之后项目代码就完全奔溃不能运行,vue 2.0在父子组件数据绑定的变化(不再支持双向绑定)颠覆了1.0的约定,很遗憾. 解决方案只有两种 ...

  4. Vue2.0父子组件之间和兄弟组件之间的数据交互

    熟悉了Vue.js的同级组件之间通信,写此文章,以便记录. Vue是一个轻量级的渐进式框架,对于它的一些特性和优点,请在官网上进行查看,不再赘述. 使用NPM及相关命令行工具初始化的Vue工程,目录结 ...

  5. vue.js+koa2项目实战(五)axios 及 vue2.0 子组件和父组件之间的传值

    axios 用法: 1.安装 npm install axios --save-dev 2.导入 import axios from 'axios'; 3.使用 axios.post(url,para ...

  6. Vue 组件&组件之间的通信 之 非父子关系组件之间的通信

    Vue中不同的组件,即使不存在父子关系也可以相互通信,我们称为非父子关系通信: 我们需要借助一个空Vue实例,在不同的组件中,使用相同的Vue实例来发送/监听事件,达到数据通信的目的: 实例: 初始加 ...

  7. 手把手教你撸个vue2.0弹窗组件

    手把手教你撸个vue2.0弹窗组件 在开始之前需要了解一下开发vue插件的前置知识,推荐先看一下vue官网的插件介绍 预览地址 http://haogewudi.me/kiko/inde... 源码地 ...

  8. vue2.0 父子组件通信 兄弟组件通信

    父组件是通过props属性给子组件通信的来看下代码: 父组件: <parent> <child :child-com="content"></chil ...

  9. vue2.0父子组件以及非父子组件如何通信

    1.父组件传递数据给子组件 父组件数据如何传递给子组件呢?可以通过props属性来实现 父组件: <parent> <child :child-msg="msg" ...

随机推荐

  1. linux下svn安装和使用(centos)

    1.安装svn 本地测试环境 centos6.5 # yum安装 yum -y install subversion # 查看svn版本 svnserve --version # 建立版本库目录 mk ...

  2. JS-04-流程控制和循环

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  3. laravel 初学路由简单介绍

    文档中的路由详细演示[初学laravel]对应laravel 的框架目录:routes/web.php 路由的格式一:Route::get($uri,$callback); 1.简单的浏览器输出 Ro ...

  4. Kubernetes学习(二)

    二 POD生命周期 initC作用说明 initC举例说明 init-pod.yaml apiVersion: v1kind: Podmetadata: name: myapp-pod labels: ...

  5. oracle11G 已开启监听,但远程连接依旧无监听解决过程

    1.连接数据库显示无监听程序,首先查看服务器的oracle监听服务是否开启,服务名称:OracleOraDb11g_home1TNSListener(具体环境中可能不完全一样,但是认准TNSListe ...

  6. 实验13:VLAN/TRUNK/VTP/

    实验10-1: 划分VLAN Ø    实验目的通过本实验,读者可以掌握如下技能:(1) 熟悉VLAN 的创建(2) 把交换机接口划分到特定VLAN Ø    实验拓扑 实验步骤要配置VLAN,首先要 ...

  7. [Python源码剖析]获取Python小整数集合范围

    #!/usr/bin/env python #-*- coding=utf-8 -*- small_ints = dict() for i in range(-10000,10000): small_ ...

  8. Spring 事件:Application Event

    Spring Application Event Spring 的事件(Application Event)为 Bean 与 Bean 之间的消息通信提供了支持.当一个 Bean 处理完一个任务之后, ...

  9. 不用'+'完成a + b

    这也是'+'底层运算原理: #include<bits/stdc++.h> using namespace std; int a,b; int main() { scanf("% ...

  10. 20200115--python学习第九天

    今日内容 三元运算 函数 考试题 1.三元运算(又称三目运算) v= 前面 if 条件 else 后面 if 条件: v = '前面' else: v ='后面' 示例:让用户输入值,如果值是整数,则 ...