点赞的组件
点一次就是点赞,再点一次就是取消点赞,不能多次点赞. 全局组件
<body>
<div id="app">
<like></like>
</div>
</body>
<script type="text/javascript" src="https://cdn.jsdelivr.net/vue/2.1.3/vue.js"></script>
<script type="text/javascript">
//注册子组件
Vue.component("like",{
template : `
<div>
<button v-on:click="toggle_like()">点赞{{ like_count }}</button>
</div>
`,
data : function(){
return {
like_count : 288,
liked : false,
}
},
methods : {
toggle_like : function(){
if(!this.liked){
this.like_count++;
}else{
this.like_count--;
}
this.liked = !this.liked;
}
}
})
//初始化父组件
new Vue({
el:"#app",
})
</script>
-------------------------------------------------------------------------分割线-----------------------------------------------------------------
父子间通信
通过 props 通信,
<body>
<div id="app">
<alert msg="Yooooo"></alert>
<user username="whh"></user>
</div>
</body>
<script type="text/javascript" src="https://cdn.jsdelivr.net/vue/2.1.3/vue.js"></script>
<script type="text/javascript">
Vue.component("user",{
template : `
<div>
<a :href="'/user/'+username">{{ username }}</a>
</div>
`,
props : ["username"],//如果没有props通信,页面上显示不了,拿不到username的值whh
data : function(){
return {
}
},
})
Vue.component("alert",{
template : `
<div>
<button v-on:click="alert()">弹弹弹</button>
</div>
`,
props : ["msg"],
data : function(){
return {
}
},
methods : {
alert : function(){
alert(this.msg)
}
}
})
//初始化父组件
new Vue({
el:"#app",
})
</script>
----------------------------------------------------------------------------分割线------------------------------------------------------------
子父通信
这个我觉得是有点绕的,在子组件里面触发父组件的show-balance事件,而这个事件链接的是一个真正的函数事件show_balance,这个函数改变了 v-if 的显示形态
仔细捋下来觉得写得很好,这样,子组件就能触发任意自定义事件了
<body>
<div id="app">
<balance></balance>
</div>
</body>
<script type="text/javascript" src="https://cdn.jsdelivr.net/vue/2.1.3/vue.js"></script>
<script type="text/javascript">
// 两个component, 子向父喊话,父显示余额
//父组件
Vue.component("balance",{
template : `
<div>
<show @show-balance="show_balance"></show>
<div v-if="show">
您的余额: ¥98
</div>
</div>
`,
props : ["username"],
data : function(){
return {
show : false
}
},
methods:{
show_balance:function(data){
this.show = true;
console.log(1,data)
}
}
})
//子组件
Vue.component("show",{
template : `
<div>
<button v-on:click="on_click()">显示余额</button>
</div>
`,
// props : ["msg"],
data : function(){
return {
}
},
methods : {
on_click : function(){
this.$emit("show-balance",{a: 1, b: 2});
}
}
})
//初始化父组件
var parent = new Vue({
el:"#app",
})
</script>
平行组件通信
<body>
<div id="app">
<huahua></huahua>
<shuandan></shuandan>
</div>
</body>
<script type="text/javascript" src="https://cdn.jsdelivr.net/vue/2.1.3/vue.js"></script>
<script type="text/javascript">
//两个component, 一个负责说,一个负责听
//子组件通过 事件的方式 向父组件喊话
var Event = new Vue();
Vue.component("huahua",{
template:`
<div>
我说:<input v-model="i_said" type="text" @keyup="onchange"/>
</div>
`,
data(){
return {
i_said : "",
}
},
methods:{
onchange: function(){
Event.$emit("huahua-said-something",this.i_said)
}
}
})
Vue.component("shuandan",{
template: `
<div>
花花说:{{ huahua_said }}
</div>
`,
data(){
return {
huahua_said: "",
}
},
mounted(){
//挂载完毕
var me = this;
Event.$on("huahua-said-something",function(data){
//console.log(data);
//console.log(this);
//任意组件之间的通信,要有一个调度器,由这个调度器去调度每一条事件
me.huahua_said = data;
})
}
})
//初始化父组件
var parent = new Vue({
el:"#app",
})
</script>
网友评论