vue组件通讯

#props传递数据

  • 父->子
//父组件传递数据
<template>
<Children :data="msg"></Children>
</template> <script>
import Children from "./Children";
export default {
components: {
Children
},
data() {
return { msg: 100 };
}
};
</script> //子组件接收数据
<script>
export default {
props: {
name: {
type: Number, //传递数据类型,不符合会发出警告
default: ()=>{} //指定默认值
}
}
};
</script>

#$emit

  • 子-父  $emit使用
//子组件   使用$emit自定义事件
<template>
<div @click="handler()">向父组件传递数据</div>
</template> <script>
export default {
methods: {
handler () {
this.$emit('change', '我是向父组件传递的数据');
}
}
};
</script> //父组件
<template>
<Children @change="receive()"></Children>
</template> <script>
import Children from "./Children";
export default {
components: {
Children
},
methods: {
receive (res) {
console.log('res:' + res);
}
}
};
</script>

#.sync

  • .sync
用法: 改变子组件或者父组件传递的值。

//父-子  子组件接收参考上面
<template>
<Children :data.sync="msg"></Children>
</template> //子->父
<template>
<div @click="$emit('update:name','向父组件传递的数据')"></div>
</template> <template>
{{ name }}
<Children :name.sync="name"></Children>
</template>
<script>
import Children from "./Children";
export default {
components: {
Children
},
data () {
name: '默认数据'
}
};
</script>

#$parent与$children

  • 爷孙组件,this.$parent, this.$children
//向上派发事件
Vue.prototype.$dispatch = function $dispatch(eventName, data) {
let parent = this.$parent;
while (parent) {
parent.$emit(eventName, data);
parent = parent.$parent;
}
}; this.$parent.$emit('change', '调用父组件的emit事件向上派发'); //向下派发事件
Vue.prototype.$broadcast = function $broadcast(eventName, data) {
const broadcast = function () {
this.$children.forEach((child) => {
child.$emit(eventName, data);
if (child.$children) {
$broadcast.call(child, eventName, data);
}
});
};
broadcast.call(this, eventName, data);
}; this.$children 访问子组件

#兄弟组件通信(EventBus)

Vue.prototype.$bus = new Vue();

//兄弟一
<div @click="handler()"></div>
<script>
export default {
methods: {
handler () {
this.$bus.$emit('send', '我是传递的数据');
}
}
};
</script> //兄弟二
<script>
export default {
methods: {
handler () {
let _self = this;
_self.$bus.$on('send', (res) => {
cosole.log('msg:' + msg);
});
}
}
};
</script>

#Provide与inject

//在父组件中注入数据
provide() {
return { parentMsg: "父亲" };
} //在任意子组件中可以注入父级数据
inject: ["parentMsg"] // 会将数据挂载在当前实例上

#$attrs

//父组件
<template>
<Children name="along"></Children>
</template> //子组件
<template>
{{ $attrs }}
//{ "msg": "along" }
</template>

Vue通讯的更多相关文章

  1. Vue.js——快速入门Vuex

    一. 什么是Vuex? Vuex是一个专门为Vue.js应用程序开发的状态管理模式, 它采用集中式存储管理所有组件的公共状态, 并以相应的规则保证状态以一种可预测的方式发生变化. 上图中绿色虚线包裹起 ...

  2. Vue.js——十分钟入门Vuex

    一. 什么是Vuex?   Vuex Vuex是一个专门为Vue.js应用程序开发的状态管理模式, 它采用集中式存储管理所有组件的公共状态, 并以相应的规则保证状态以一种可预测的方式发生变化. Vue ...

  3. Vuex简介

    一. 什么是Vuex?   Vuex Vuex是一个专门为Vue.js应用程序开发的状态管理模式, 它采用集中式存储管理所有组件的公共状态, 并以相应的规则保证状态以一种可预测的方式发生变化. Vue ...

  4. vuex 使用

    一.什么是Vuex Vuex是一个专门为Vue.js应用程序开发的状态管理模式, 它采用集中式存储管理所有组件的公共状态, 并以相应的规则保证状态以一种可预测的方式发生变化 二. 为什么要使用Vuex ...

  5. uni-app 生命周期函数

    应用生命周期 函数名 说明 onLaunch 当uni-app 初始化完成时触发(全局只触发一次) onShow 当 uni-app 启动,或从后台进入前台显示 onHide 当 uni-app 从前 ...

  6. uniapp 入门

    uniapp官网 uni-app 是一个使用 Vue.js (opens new window)开发所有前端应用的框架,开发者编写一套代码,可发布到iOS.Android.Web(响应式).以及各种小 ...

  7. 【原】vue单文件组件互相通讯

    在vue中,我们可以把一个页面各个部分单独封装起来,做成各种小组件,然后加载,这样的好处是代码维护起来比较容易,重复的代码多处调用! 在一个vue项目中,单文件组件以.vue形式文件命名 每个组件之间 ...

  8. 【Vue】Vue中的父子组件通讯以及使用sync同步父子组件数据

    前言: 之前写过一篇文章<在不同场景下Vue组件间的数据交流>,但现在来看,其中关于“父子组件通信”的介绍仍有诸多缺漏或者不当之处, 正好这几天学习了关于用sync修饰符做父子组件数据双向 ...

  9. Vue中父子组件通讯——组件todolist

    一.todolist功能开发 <div id="root"> <div> <input type="text" v-model=& ...

随机推荐

  1. UVA_401:Palindromes

    AC:Time(29ms)     C++ 4.8.2 #include<stdio.h> #include<string.h> char * mirstr = "A ...

  2. oracle函数 localtimestamp

    [功能]:返回会话中的日期和时间 [参数]:没有参数,没有括号 [返回]:日期 [示例]select localtimestamp from dual; 返回:14-11月-08 12.35.37.4 ...

  3. @loj - 6354@「CodePlus 2018 4 月赛」最短路

    目录 @description@ @solution@ @accepted code@ @details@ @description@ 企鹅国中有 N 座城市,编号从 1 到 N . 对于任意的两座城 ...

  4. @省选模拟赛03/16 - T3@ 超级树

    目录 @description@ @solution@ @accepted code@ @details@ @description@ 一棵 k-超级树(k-SuperTree) 可按如下方法得到:取 ...

  5. Project Euler Problem 14-Longest Collatz sequence

    记忆化搜索来一发.没想到中间会爆int #include <bits/stdc++.h> using namespace std; const int MAXN = 1000000; in ...

  6. PHP内置服务器

    PHP在安装的时候会内置了服务器的功能,我们在使用的过程中如果只是调试,可以选择启动PHP内置的服务器,下面是windows下PHP内置服务器的启动步骤: 1.将php的D:\phpStudy\php ...

  7. 禁用GPU版本TensorFlow,切换到CPU版本TensorFlow。

    #禁用gpu版本TensorFlow,因为CUDA号码从0开始,这里直接让CUDA使用-1的GPU,自然就无法使用gpu了. 代码前面加入: import osos.environ["CUD ...

  8. HMM——维特比算法(Viterbi algorithm)

    1. 前言维特比算法针对HMM第三个问题,即解码或者预测问题,寻找最可能的隐藏状态序列: 对于一个特殊的隐马尔可夫模型(HMM)及一个相应的观察序列,找到生成此序列最可能的隐藏状态序列. 也就是说给定 ...

  9. hdu 1358 Period (KMP求循环次数)

    Problem - 1358 KMP求循环节次数.题意是,给出一个长度为n的字符串,要求求出循环节数大于1的所有前缀.可以直接用KMP的方法判断是否有完整的k个循环节,同时计算出当前前缀的循环节的个数 ...

  10. windows/Linux/Mac下安装maven,maven作用

    Linux下安装maven 1.首先到Maven官网下载安装文件,目前最新版本为3.0.3,下载文件为apache-maven-3.3.9-bin.tar.gz,下载可以使用wget命令: 2.进入下 ...