1. 程式人生 > >非父子元件的資料傳遞

非父子元件的資料傳遞

複製程式碼可以直接檢視效果

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <script type="text/javascript" src="https://unpkg.com/vue/dist/vue.js"></script>
    <style type="text/css"></style>
</head>
<body
>
<div id="app"> //定義兩個元件 <foo></foo> <bar></bar> </div> <script type="text/javascript"> var bus = new Vue() var foo = { render: function(creatElement){ return creatElement( 'button',{ on:{ click:this
.addBar } //設定預設值為count },this.count ) }, //這裡data必須為函式就不多說了 data: function(){ return { count: 0, } }, methods: { addBar: function(){ //執行incrementBar事件,注意是事件,不是方法,因為Vue中可以自定義事件
bus.$emit("incrementBar") } }, mounted: function(){ //在鉤子函式中註冊事件,注意這裡一定要使用var _this=this。因為這裡的this是例項化的物件,而裡面的this是註冊事件中的上下文 var _this = this bus.$on('incrementFoo',function(id){ _this.count++ }) } } var bar = { render: function(creatElement){ return creatElement( 'button',{ on:{ click: this.addFoo } },this.count ) }, data: function(){ return { count: 0 } }, methods: { addFoo: function(){ bus.$emit("incrementFoo") } }, mounted: function(){ var _this = this bus.$on('incrementBar',function(){ _this.count++ }) } } var app = new Vue({ el: "#app", data: { count: 0, }, methods: { }, components: { 'foo': foo, 'bar':bar } })
</script> </body> </html>