1. 程式人生 > >Vue父子元件通訊,props和自定義監聽

Vue父子元件通訊,props和自定義監聽

1.子元件通過props接收父元件中的值,插入子元件中會跟隨父元件而變化。(:x="num")--->頁面中插入{{x}}

2.如果只想變接收過來的值,而不改變父元件的,則吧接收過來的值存一下。(newx:this.x)--->頁面中插入{{newx}}

3.子元件想修改父元件的值,需要新增事件,如下圖中的“tap”,父元件中,在引入子元件的地方監聽tap(@tap="callback")

4.在父元件methds中寫callback(){}函式。進行值的改變,或者其他操作即可

<!DOCTYPE html>
<html lang="zh-cn">
	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <title></title>
		<script src="../src/vue.js"></script>
	</head>

	<body>
		<div id="app">
			<h2>父元件中</h2>
			<button @click="num=2">父元件中改變num</button>
			<p>父元件中的num:{{num}}</p>
			<childcom @tap="change" :x="num"></childcom>
		</div>
		<script>
			// 一個元件另一個元件的模板中使用,就成為前一個元件為子元件,後一個為父元件。
			Vue.component('childcom',{
				props:["x"], // 接收傳過來的x
				data(){  
					return {
						newx: this.x //把接受過來的x存起來,可以用來渲染和修改
					}
				},
				template: `
				<div>
					<button @click="add">改變父元件的</button>
					<p>子元件從父元件拿過來的x:{{x}}</p>
					<p>子元件自己的newx:{{newx}}</p>
				</div>
				`,
				methods:{
					add(){
						// 通知父元件,改變n的值, 子元件中釋出事件出去
						// tap 是自定義的事件名,將來父元件關心這個事件,就會監聽這個事件
						this.$emit('tap',99)
					}
				}
			});

			new Vue({
				el: '#app',
				data:{
					num:1
				},
				methods:{
					change(n){
						this.num = n;
					}
				}
			})



		</script>
	</body>
</html>