<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<script src="js/vue.js" type="text/javascript" charset="utf-8"></script>
</head>
<body>
<div id="app">
<counter :count='0' @inc='handleIncrease'></counter>
<counter :count='1' @inc='handleIncrease'></counter>
<div>{{total}}</div>
</div>
<script>
var counter={
props:['count'],
template:'<div @click="handleClick">{{number}}</div>',
data:function(){
return {
number:this.count
}
},
methods:{
handleClick:function(){
this.number=this.number+2;
this.$emit('inc',2)
}
}
}
var vm=new Vue({
el:"#app",
data:{
total:1
},
components:{
counter:counter
},
methods:{
handleIncrease:function(step){
this.total+=step
}
}
})
</script>
</body>
</html>
父组件通过属性的形式向子组件传值:count='0'
子组件通过事件触发的形式向父组件传值this.$emit('inc',2)-----vm.$emit( eventName, […args] )
父子组件传值隐形规定,单向数据流--父子件可以随意的向子组件传递参数,
子组件不能修改父组件传递过来的数据,只能使用
如果要修改 拷贝一个副本出来 修改副本
data:function(){
return {
number:this.count //cout父组件传递的值
}
},
子组件接收父组件参数校验
props:{
count:{
type:String,
required:false,
default:'default value' ,
validator:function(value){
return (value.length>5)
}
}
},
给组件绑定原生事件
@click:native='handleClick'
非父子组件间的数据传递
1. vuex
2. Bus/总线/发布订阅模式/观察者模式
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>费父子组件间传值(Bus/总线/发布订阅模式/观察者模式)</title>
<script src="js/vue.js" type="text/javascript" charset="utf-8"></script>
</head>
<body>
<div id="app">
<child content='sun'></child>
<child content='yaya'></child>
</div>
<script>
Vue.prototype.bus=new Vue()
Vue.component('child',{
props:{
content:String
},
data:function(){
return{
selfContent:this.content
}
},
template:'<div @click="handleClick">{{selfContent}}</div>',
methods:{
handleClick:function(){
this.bus.$emit('change',this.selfContent)
}
},
mounted:function(){
var this_=this;
this.bus.$on('change',function(msg){
alert(msg)
this_.selfContent=msg
})
}
})
var vm=new Vue({
el:"#app",
methods:{
},
})
</script>
</body>
</html>