组件

组件之间的数据是单向绑定的。

父组件向子组件通信

是通过子组件定义的props属性来实现。通过props定义变量与变量类型和验证方式。

props简化定义

在简化定义中,变量是以数组的方式定义。

Vue.component("test",{
template:'....',
props:["变量1","变量2",...]
})

props完整定义

完整定义是采用字面量形式,type 要定义的类型

Vue.component("test",{
template:'....',
props:{
name:String, // 变量:类型,
name1:[String,Number] // 多类型:表示可为字符串或数值类型
name2:{
type:Array, // 数组或对象类型 要设置一个默认值。
default(){
return [];
}
},
name3:{
type:String,
required:true, // 必传
}
name3:{
type:String,
validator(value){
//... 自定义数据验证方式。
}
}
}
})

通信方式

父组件向子组件定义的变量绑定值。

    <p>父组件向子组件传递数据count数据,采用v-bind进行数据绑定了,当父组件值变动时子组件也会变。</p>
<div class="app">
<input v-model="count">
<my-component :number="count"></my-component>
</div>
<script>
// 定义子组件
Vue.component("my-component", {
props:["number"],
template:`<span>动态接收:{{number}}</span>`,
});
new Vue({
el: ".app",
data: {
count: 0
}
});
</script>

子组件向父组件通信

子组件向父组件通信采用的是自定义事件。$emit与$on。

    <p>子组件向父组件通信采用的是自定义事件。$emit与$on。</p>
<div class="app">
{{count}}
<!-- 相当于设置接收对象 -->
<my-component @add="getcount"></my-component>
</div>
<script>
// 定义子组件
Vue.component("my-component", {
data() {
return {
count: 0
}
},
template: `<button @click="test">+1</button>`,
methods: {
test() {
this.$emit('add', ++this.count); // 当监听事件被触发后,向接收对象传递信息,告诉它变化量。
}
} });
new Vue({
el: ".app",
data: {
count: 0
},
methods:{
getcount(value){
this.count = value;
}
}
});
</script>

同级组件通信(任意级别组件通信)

采用中央事件总线(bus)来实现。就是创建一个空的vue对象,在要接收数据的组件里面设置$on事件,在要监听的组件里面设置$emit.

    <p>同级组件,组件1向组件2传递数据。</p>
<p>当组件+1事件触发后,向组件2传递结果。</p>
<div class="app">
<my-component-1></my-component-1>
<my-component-2></my-component-2>
</div>
<script>
let bus = new Vue(); // 定义子组件
Vue.component("my-component-1", {
data() {
return {
count: 0
}
},
template: `<button @click="test">+1</button>`,
methods: {
test() {
bus.$emit('on-add', ++this.count);
}
} }); // 定义子组件
Vue.component("my-component-2", {
data() {
return {
count: 0
}
},
template: `<span>{{count}}</span>`,
mounted() {
bus.$on("on-add", (vlaue) => {
this.count = vlaue
})
}
});
new Vue({
el: ".app"
});
</script>

vue 组件通信的更多相关文章

  1. vue组件通信的几种方式

    最近用vue开发项目,记录一下vue组件间通信几种方式 第一种,父子组件通信 一.父组件向子组件传值 1.创建子组件,在src/components/文件夹下新建一个Child.vue 2.Child ...

  2. VUE 组件通信总结

    1.prop 父组件传递给子组件,即通过VUE本身具有的Props属性来传递值 Child组件 <template> <span>{{message}}</span> ...

  3. vue组件通信那些事儿

    一.说说通信 通信,简言之,交流信息.交流结束后,把信息放在哪里,这是一个值得思考的问题.vue中保存状态有2种方式,组件内的data属性和组件外的vuex的state属性. 1.用state的场景 ...

  4. vue组件通信&&v兄弟组件通信eventbus遇到的问题(多次触发、第一次不触发)

    组件通讯包括:父子组件间的通信和兄弟组件间的通信.在组件化系统构建中,组件间通信必不可少的 (vuex以后再说). 父组件--> 子组件 1. 属性设置 父组件关键代码如下: <templ ...

  5. vue 组件通信传值

    父子组件通信: 子组件 <template> <div> <h3 @click="alerrt"> 我是子组件一</h3> < ...

  6. Vue组件通信之Bus

    关于组件通信我相信小伙伴们肯定也都很熟悉,就不多说了,对组件通信还不熟悉的小伙伴移步这里. 在vue2.0中 $dispatch 和 $broadcast 已经被弃用.官方文档中给出的解释是: 因为基 ...

  7. Vue组件通信的几种方法

    上一节说到,vue.js是允许子组件通过props接受父组件的信息,但是不允许父组件通过props接受子组件的信息 1. $emit()和on 当子组件需要向父组件传递数据时,就要用到自定义事件. 使 ...

  8. vue组件通信之父子组件通信

    准备工作: 首先,新建一个项目,如果这里有不会的同学,可以参考我转载过的文章 http://www.cnblogs.com/Sky-Ice/p/8875958.html  vue 脚手架安装及新建项目 ...

  9. vue组件通信之非父子组件通信

    什么顺序不顺序的.. 先来说说非父子组件通信. 首先,我们先来了解下vue中的 1.$emit  触发当前实例上的事件,附加参数都会传给监听器回调. 2.$on  监听当前实例上的自定义事件.事件可以 ...

随机推荐

  1. 树莓派3B+ HDMI连接显示屏 因供电问题而不能进入系统

    1.config.txt文件中hdmi_force_hotplug=1前面的注释符号"#"一定要去掉. 2.完成上述操作后,树莓派通过HDMI连接屏幕,一直在开机画面循环重复,却不 ...

  2. [Swift]LeetCode72. 编辑距离 | Edit Distance

    Given two words word1 and word2, find the minimum number of operations required to convert word1 to  ...

  3. 一个 Vue & Node 的全栈小项目

    约学 - 可以寻找一起自习的小伙伴的Web APP 一个基于 Vue & Node 的移动端全栈小项目 在线演示(请使用移动端查看效果) 源码地址: https://github.com/G- ...

  4. IntelliJ IDEA下SVN的配置及使用说明

    1 下载及安装SVN客户端. 到官网下载小乌龟SVN客户端,官网地址:https://tortoisesvn.net/downloads.html,根据操作系统情况选择适合版本.比如64为操作系统,如 ...

  5. Python内置函数(5)——bin

    英文文档: bin(x) Convert an integer number to a binary string. The result is a valid Python expression. ...

  6. 【实战分享】又拍云 OpenResty / Nginx 服务优化实践

    2018 年 11 月 17 日,由 OpenResty 主办的 OpenResty Con 2018 在杭州举行.本次 OpenResty Con 的主题涉及 OpenResty 的新开源特性.业界 ...

  7. 并发编程(一)—— volatile关键字和 atomic包

    本文将讲解volatile关键字和 atomic包,为什么放到一起讲呢,主要是因为这两个可以解决并发编程中的原子性.可见性.有序性,让我们一起来看看吧. Java内存模型 JMM(java内存模型) ...

  8. 【朝花夕拾】Handler篇

    如果您的app中没有使用过Handler,那您一定是写了个假app:如果您笔试题中没有遇到Handler相关的题目,那您可能做了份假笔试题:如果您面试中没被技术官问到Handler的问题,那您也许碰到 ...

  9. Android Native App自动化测试实战讲解(下)(基于python)

    6.Appuim自动化测试框架API讲解与案例实践(三) 如图1,可以在主函数里通过TestSuite来指定执行某一个测试用例: 6.1,scroll():如图2 从图3中可以看到当前页面的所有元素r ...

  10. CentOS安装FTP服务

    最近公司有一个内部比赛(黑客马拉松),报名参加了这么一个赛事,在准备参赛作品的同时(参赛服务器需要自己搭建),借着这个机会,决定把tomcat部署相关的知识从0到1重新捋一遍.就当备忘录了. FTP服 ...