父組件向子組件傳值
1. 組件實例定義方式,注意:一定要使用props
屬性來定義父組件傳遞過來的數(shù)據(jù)
<div id="app">
<!-- 父組件诺擅,可以在引用子組件的時候跟束, 通過 屬性綁定(v-bind:) 的形式, 把 需要傳遞給 子組件的數(shù)據(jù)灵莲,以屬性綁定的形式万皿,傳遞到子組件內(nèi)部状土,供子組件使用 -->
<com1 v-bind:parentmsg="msg"></com1>
</div>
<script>
// 創(chuàng)建 Vue 實例腐宋,得到 ViewModel
var vm = new Vue({
el: '#app',
data: {
// 結(jié)論:經(jīng)過演示紊服,發(fā)現(xiàn),子組件中胸竞,默認無法訪問到 父組件中的 data 上的數(shù)據(jù) 和 methods 中的方法
msg: '這是父組件中的消息'
},
methods:{ },
components: {
com1: {// 注意:子組件中的 data 數(shù)據(jù)欺嗤,并不是通過 父組件傳遞過來的,而是子組件自身私有的卫枝,比如: 子組件通過 Ajax 煎饼,請求回來的數(shù)據(jù),都可以放到 data 身上校赤;
// data 中的數(shù)據(jù)吆玖,都是可讀可寫的;
data() {
return {
title: '123',
content: 'qqq'
}
},
template: '<h1>這是子組件 --- {{parentmsg}}</h1>',
// 注意:組件中的所有 props 中的數(shù)據(jù)马篮,都是通過 父組件傳遞給子組件的
// props中的數(shù)據(jù)沾乘,都是只讀的,無法重新賦值
props: ['parentmsg'], // 把父組件傳遞過來的 parentmsg 屬性浑测,先在 props 數(shù)組中翅阵,定義一下歪玲,這樣,才能使用這個數(shù)據(jù)
}
}
});
</script>
2. 使用v-bind
或簡化指令掷匠,將數(shù)據(jù)傳遞到子組件中:
<div id="app">
<com2 @func="show"></com2>
<!-- 父組件向子組件傳遞方法滥崩,使用的是 事件綁定機制; v-on, 當我們自定義了一個事件屬性之后讹语,那么子組件钙皮,就能夠通過某些方式,來調(diào)用傳遞進去的這個方法了 -->
</div>
<template id="tmpl">
<div>
<h1>這是子組件</h1>
<input type="button" value="這是子組件中的按鈕 - 點擊它顽决,觸發(fā) 父組件傳遞過來的 func 方法" @click="myclick">
</div>
</template>
<script>
// 定義了一個字面量類型的 組件模板對象
var com2 = {
template: '#tmpl', // 通過指定了一個 Id, 表示 說株灸,要去加載 這個指定Id的 template 元素中的內(nèi)容,當作 組件的HTML結(jié)構(gòu)
data() {
return {
sonmsg: { name: '小頭兒子', age: 6 }
}
},
methods: {
myclick() {
// 當點擊子組件的按鈕的時候擎值,如何 拿到 父組件傳遞過來的 func 方法慌烧,并調(diào)用這個方法?鸠儿?屹蚊?
// emit 英文原意: 是觸發(fā),調(diào)用进每、發(fā)射的意思
// this.$emit('func123', 123, 456)
this.$emit('func', this.sonmsg)
}
}
}
// 創(chuàng)建 Vue 實例汹粤,得到 ViewModel
var vm = new Vue({
el: '#app',
data: {
datamsgFormSon: null
},
methods: {
show(data) {
// console.log('調(diào)用了父組件身上的 show 方法: --- ' + data)
// console.log(data);
this.datamsgFormSon = data
}
},
components: {
com2
// com2: com2
}
});
</script>
子組件向父組件傳值
- 原理:父組件將方法的引用,傳遞到子組件內(nèi)部田晚,子組件在內(nèi)部調(diào)用父組件傳遞過來的方法嘱兼,同時把要發(fā)送給父組件的數(shù)據(jù),在調(diào)用方法的時候當作參數(shù)傳遞進去贤徒;
- 父組件將方法的引用傳遞給子組件芹壕,其中,
getMsg
是父組件中methods
中定義的方法名稱接奈,func
是子組件調(diào)用傳遞過來方法時候的方法名稱
<son @func="getMsg"></son>
- 子組件內(nèi)部通過
this.$emit('方法名', 要傳遞的數(shù)據(jù))
方式踢涌,來調(diào)用父組件中的方法,同時把數(shù)據(jù)傳遞給父組件使用
<div id="app">
<!-- 引用父組件 -->
<son @func="getMsg"></son>
<!-- 組件模板定義 -->
<script type="x-template" id="son">
<div>
<input type="button" value="向父組件傳值" @click="sendMsg" />
</div>
</script>
</div>
<script>
// 子組件的定義方式
Vue.component('son', {
template: '#son', // 組件模板Id
methods: {
sendMsg() { // 按鈕的點擊事件
this.$emit('func', 'OK'); // 調(diào)用父組件傳遞過來的方法序宦,同時把數(shù)據(jù)傳遞出去
}
}
});
// 創(chuàng)建 Vue 實例睁壁,得到 ViewModel
var vm = new Vue({
el: '#app',
data: {},
methods: {
getMsg(val){ // 子組件中,通過 this.$emit() 實際調(diào)用的方法互捌,在此進行定義
alert(val);
}
}
});
</script>
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者