子组件嵌套在父组件内部,父组件给子组件传递一个标识,在子组件内部用props接收,子组件在模板里能够经过{{}}的形式进行使用。若是父组件给子组件传递的标识中含有—,子组件在接收时采用驼峰式接收。vue
2 子组件给父组件传值数组
<template id="son">
<div>
我是孩子
<button @click="giveMoney(10000)">給父母打钱</button>
</div>
</template>
<template id="test">
<div>
<button @click='count++'>点击次数{{count}}</button>,
这个月孩子打了{{money}}元钱
<v-son @to-parent="getMoney"></v-son>
</div>
</template>this
const Son = {
template: "#son",
data () {
return {
}
},
methods: {
giveMoney (val) {
// 你办了卡,把卡给了父母,你打钱
this.$emit('to-parent', val)
}
}
}
// 一、定义组件 ---- 组件的首字母必须大写
const Test = {
template: "#test",
data () {
return {
money: 0
}
},
methods:{
getMoney ( val ) {
this.money = val
}
},
components: {
'v-son': Son
}
}prototype
非父子间的传值我我的以为算是组件传值中最麻烦的一个,你说它难她也难,说它简单它也简单,咱们只要定义好一方负责监听一方负责触发便可,他们之间相互传值依据的是中央事件总线,也就是new vue ,至关于飞机场中的塔台同样,都受它指挥。code
$on 负责监听事件 $emit 负责触发事件 并传递参数 若是有AB两个组件,若是A要给B传值,B就必须先监听A,使用起来比较麻烦。 事件的中央总线 (飞机塔台,邮差的故事) 在src下建立bus.js var bus = new Vue() //中央事件总线 export default bus ; 假若有AB两个组件 在AB组件中引入bus中央事件总线
在A组件中发送一个信息给B组件component
methods:{ sendData(val){ bus.$emit("A-B",val) } } mounted(){ bus.$on("B-A",function(val){ console.log(val) }) } 在B组件内接收 mounted(){ bus.$on("A-B",function(val){ console.log(val) bus.$emit("B-A",val) }) }
若是AB组件有两次交互,就会有四次事件,若是作三次事件就会有六次事件
其实最麻烦的不是他们之间的传值,而是定义他们之间的事件名称,若是没有一套完备定义事件名称的规则,会无故的增长项目开发的周期,下降了开发效率,代码的耦合度会增长,维护性也低了。
因此不建议使用事件
能够在main.js中 vue.prototype.$bus = new Vue()在原型上扩展一个$bus 不用单建立bus文件 经过this.$bus.$on()进行使用