vue中非父子組件的傳值bus的使用


非父子之間的組件傳值,可以使用vuex。簡單的狀態管理,也可以用vue bus

vue bus可以實現不同組件間、不同頁面間的通信,比如我在A頁面出發點擊事件,要B頁面發生變化,使用方法如下:

全局定義:main.js

window.eventBus = new Vue()
 
在A頁面的事件中觸發:
eventBus.$emit('todo', '123')
 
在B頁面的created中開始監聽,越早監聽越好:
eventBus.$on('todo', (params) => {
         console.log(params)
})
 下面我來一個例子
<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>非父子組件傳值(bus/總線/發布訂閱模式/觀察者模式)</title>
    <script src="./vue.js"></script>
</head>
<body>
    <div id="app">
        <child content="Dell"></child>
        <child content="Lee"></child>
    </div>
    <script>
    Vue.prototype.bus = new Vue();

    Vue.component('child',{
        data:function(){
            return {
                selfContent:this.content
            }
        },
        props:{
            content:String
        },
        template:'<div @click="handleClick">{{selfContent}}</div>',
        methods:{
            handleClick:function(){
                //由於bus是vue的一個實例,所以它有$emit這個方法,change就是一個隨意的名字,可以改成aaa
                this.bus.$emit('change',this.selfContent)
            }
        },
        mounted:function(){
            var this_= this;
            this.bus.$on("change",function(msg){
                this_.selfContent=msg;
            })
        }
    })
    var vm= new Vue({
        el:'#app',
        data:{},
        methods:{
        },

    })
    </script>
</body>
</html>

當然也可以參考一些其他人的博客,注意理解

https://www.jianshu.com/p/5b383e66c117  

http://www.cnblogs.com/fanlinqiang/p/7756566.html

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM