组件 (Component) 是 Vue.js 最强大的功能之一。组件能够扩展 HTML 元素,封装可重用的代码。在较高层面上,组件是自定义元素,Vue.js 的编译器为它添加特殊功能。在有些状况下,组件也能够表现为用 is 特性进行了扩展的原生 HTML 元素。vue
组件A写法:webpack
<template> <div class="componentA"> ... </div> </template> <script> export default { data () { return { msg: 'component-A', } } } </script> <style> </style>
组件B写法:git
<template> <div class="message" id="componentB"> ... </div> </template> <script> import Vue from 'vue' export default Vue.component('my-component', { template: '#componentB ', data(){ return { msg: 'component-B', } } }) </script> <style> </style>
在父组件component
分别引用挂载github
<template> <div> <component-A></component-A> <component-B></component-B> </div> </template> <script> import componentA from './component-a.vue'; import componentB from './component-b.vue' export default { data () { return { } }, components:{ "component-A":componentA, "component-B":componentB } } </script> <style> </style>
对于简单的父子组件或是同属同一父组件的兄弟组件之间的通讯,vue提供了方法,不必用到vuexweb
父组件:vuex
<component-A :logo="logoMsg"></component-A> //logoMsg是父组件data里的值
子组件:segmentfault
<template> <div class="componentA"> <div>{{logo}}</div> </div> </template> ... data(){ } props:["logo"], ...
父组件:组件化
<component-A :logo="logoMsg" @toParent="componenta"></component-A> ... methods:{ componenta:function(data){ //data就是子组件传递过来的值 this.data1 = data } }
子组件:this
methods:{ toParent:function(){ this.$emit('toParent',this.data1) //调用父组件toParent方法,并传递参数 } }
效果图:
spa
效果图:
bus.js文件:
import Vue from 'vue' export default new Vue()
组件B $emit触发事件:
import Bus from './bus.js' ... byBus:function(){ Bus.$emit('byBus',this.byBusData) }
组件A $on接受事件传递数据
... data(){ }, created(){ Bus.$on('byBus',(data)=>{ this.busData = data }) },
效果图: