1. 程式人生 > >2018年11月08日 關於Vue的父子通訊 and 子父通訊 and 任意及平行元件間通訊的學習

2018年11月08日 關於Vue的父子通訊 and 子父通訊 and 任意及平行元件間通訊的學習

1、父子通訊

//在html中的相關程式碼
<body>
	<div id="app">
		<alert change_alert="再見"></alert>   //如果我們想要點選按鈕的時候彈出的內容時change_alert中的“再見”的話,那麼我們要在vue.js中進行相關的操作
	</div>
</body>
//在vue.js中的相關程式碼
Vue.component('alert',{   //定義了一個<alert>元件
	template:'<button @click="on_click">點選我</button>',
	porps:['change_alert'],     //Vue中給我提供這樣的方法porps
	methods:{
		on_click:function(){
			alert(this.change_alert);
		},
	}
});

var app = new Vue({    //作用域,沒有作用域我們定義的元件也無法顯示
	el:'#app',
});

————————我是分隔符————————

//在html中的相關程式碼
<body>
	<div id="app">
		<username username = "張三三"></username>
	</div>
</body>
//在vue.js中的相關程式碼
Vue.component('username',{   //定義了一個<alert>元件
	template:'<a :herf="\'http=user/\'+username" @click="on_click">@{{username}}</a>',   //這裡我們給a標記動態傳入username,只要修改html中的username就可以,在給a標記新增herf的時候要注意地址中單雙引號的使用,這裡就使用了轉義字元。
	porps:['username'],     //Vue中給我提供這樣的方法porps
	methods:{
		on_click:function(){
			alert(this.username);
		},
	}
});

var app = new Vue({    //作用域,沒有作用域我們定義的元件也無法顯示
	el:'#app',
});

子父通訊

//在html中的相關程式碼
<body>
	<div id="app">
		<balance></balance>
	</div>
</body>
//在vue.js中的相關程式碼
Vue.component('balance',{
    template:`
	<div>
		<show @show-balance="show_balance = true"></show>
		<div v-if="show_balance">YES!</div>
	</div>`,
    data:function(){
        return{
            show_balance: false,
    }
    },
});
Vue.component('show',{
    template:'<button @click="on_click()">你喜歡WEB前端麼?</button>',
    methods:{
        on_click:function(){
            return this.$emit('show-balance',{a:1,b:2});
        }
    }
});

var app = new Vue({
    el:'#app',
});

如果想要傳入引數,可以做一下修改。

Vue.component('balance',{
    template:`
	<div>
		<show @show-balance="show_balance"></show>
		<div v-if="show">YES!</div>
	</div>`,
	methods:{
		show_balance:function(data){
			this.show = true;
			console.log('data',data);
		}
	},
    data:function(){
        return{
            show: false,
    }
    },
});
Vue.component('show',{
    template:'<button @click="on_click()">你喜歡WEB前端麼?</button>',
    methods:{
        on_click:function(){
            return this.$emit('show-balance',{a:1,b:2});
        }
    }
});

var app = new Vue({
    el:'#app',
});

任意及平行元件間通訊

//在html中的相關程式碼
<div id="app">
    <mumu></mumu>
    <haha></haha>
</div>
var Event = new Vue();

Vue.component('mumu',{
    template:'<div>木木說:<input @keyup="on_change" type="text" v-model="i_said">{{i_said}}</div>',
    data:function () {
        return{
            i_said:'',
        }
    },
    methods:{
        on_change:function () {
            return Event.$emit('mumu-said-something',this.i_said);
        }
    },
});
Vue.component('niqiyao',{
    template:'<div>哈哈聽到木木說:{{mumu_said}}</div>',
    data:function () {
        return{
            mumu_said:'',
        }
    },
    mounted:function(){
        var me = this;
        Event.$on('mumu-said-something',function (data) {
           me.mumu_said = data;
    });
    },
});

var app = new Vue({
    el:'#app',
});