<!-- 这是第二种 -->
<div>{{count}}</div>
<jia :count="count" >加</jia>
<jian :count="count" >减</jian>
<!-- 这是第二种 -->
<script>
var event = new Vue();
var vm = new Vue({
el:"#app",
data:{
count:0,
},
mounted :function(){ //这里是重点 少了.bind(*)不行
event.$on('changeE',function(num){
this.count = num
}.bind(this))
},
components : {
'jia':{
template:'<button @click="setCount">加</button>',
props:['count'],
methods:{
setCount:function(){
event.$emit ('changeE',this.count + 1 )
}
}
},
'jian':{
data:function(){
return {
msg:''
}
},
template:'<button @click="setCount">减{{msg}}</button>',
props:['count'],
methods:{
setCount:function(){
event.$emit ('changeE',this.count - 1 )
}
},
mounted:function(){
var that = this
event.$on('changeE',function(data){
console.log(data)
console.log(435)
that.msg = data
})
}
}
},
})
//这是一个组件中有两个模板的 例子
</script>
<!-- 这是第一种 通过父子 子父之间的传值 来完成 -->
<div>{{count}}</div>
<!-- 这是第一种 -->
<!-- <jia :count="count" @add='jia'>加</jia> -->
<!-- <jian :count="count" @minus='jian'>减</jian> -->
<script>
var vm = new Vue({
el:"#app",
data:{
count:0,
},
methods:{
jia:function(data){
this.count = this.count+1
console.log(data)
},
jian:function(data){
this.count = this.count-1
}
},
components : {
'jia':{
template:'<button @click="setCount">加</button>',
props:['count'],
methods:{
setCount:function(){
this.$emit ('add',this.count + 1 )
}
}
},
'jian':{
template:'<button @click="setCount">减</button>',
props:['count'],
methods:{
setCount:function(){
this.$emit ('minus',this.count + 1 )
}
}
}
},
})
</script>
两者的区别是
第一种 使用点击组件(methods this.$emit) 给父组件绑定方法 然后再组件里写上绑定的方法 然后再父组件里的method中写方法 没有使用mounted挂载 $on 函数
第二种 使用也是在组件上绑定方法 不过使用全局vue实例 event.$emit 而且加减子组件使用$emit绑定的函数名称应该是要一样的 这样才能$on是监听才能一致 最大的区别是子 和 父组件里的mounted 中的$on使用不相同 父组件要在最后加上.bind(this) 而子组件中不需要
子组件中的this 指向的是全局