国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

vue父子組件通信的高級用法示例

2019-11-19 10:56:41
字體:
來源:轉載
供稿:網友

前言

vue項目的一大亮點就是組件化。使用組件可以極大地提高項目中代碼的復用率,減少代碼量。但是使用組件最大的難點就是父子組件之間的通信。

子通信父

父組件

<template><div class="parent">我是父組件<!--父組件監聽子組件觸發的say方法,調用自己的parentSay方法--><!--通過:msg將父組件的數據傳遞給子組件--><children :msg="msg" @say="parentSay"></children></div></template><script>import Children from './children.vue'export default {data () {return {msg: 'hello, children'}},methods: {// 參數就是子組件傳遞出來的數據parentSay(msg){console.log(msg) // hello, parent}},// 引入子組件components:{children: Children}}</script>

子組件

<template><div class="hello"><div class="children" @click="say">我是子組件<div>父組件對我說:{{msg}}</div></div></div></template><script>export default {//父組件通過props屬性傳遞進來的數據props: {msg: {type: String,default: () => {return ''}}},data () {return {childrenSay: 'hello, parent'}},methods: {// 子組件通過emit方法觸發父組件中定義好的函數,從而將子組件中的數據傳遞給父組件say(){this.$emit('say' , this.childrenSay);}}}</script>

子組件使用$emit方法調用父組件的方法,達到子通信父的目的。

父通信子

父組件

<!--Html--><template><!--父組件觸發click方法--><div class="parent" @click="say">我是父組件<!--通過ref標記子組件--><children ref="child"></children></div></template><script>import Children from './children.vue'export default {data () {return {msg: "hello,my son"}},methods: {// 通過$refs調用子組件的parentSay方法say(){this.$refs.child.parentSay(this.msg);}},// 引入子組件components:{children: Children}}</script>

子組件

<template><div class="hello"><div class="children" >我是子組件<div>父組件對我說:{{msg}}</div></div></div></template><script>export default {data () {return {msg: ''}},methods: {// 父組件調用的JavaScript方法parentSayparentSay(msg){this.msg = msg;}}}</script>

父組件通過 $refs 調用子組件的方法。

以上就是父子組件通信的方式,父子組件傳遞數據直接用props,或者使用 $emit 和 $refs 依靠事件來傳遞數據。

父子組件通信提升篇

上文中,子通信父是在 子中觸發點擊事件 然后調用父組件的方法,父通信子是在 父中觸發點擊事件 調用子組件的方法。但是實際情況中可能存在 子通信父時子組件不允許有點擊事件 而事件在父中或者 父通信子時點擊事件在子組件 中。

子通信父時擊事件在父組件

這種情況其實很常見,例如提交一個表單時表單的內容為子組件,而保存按鈕在父組件上。此時點擊保存按鈕想要獲取子組件表單的值。這種情況下已經不單單是子通信父和父通信子了,需要將兩者結合在一起使用才能完成整個通信過程。

實現的思路是在父組件中點擊事件時,先通過父子通信調用子組件的方法,然后在子組件中的該方法里使用子父通信調用父組件的另一個方法并將信息傳遞回來。以下是代碼演示:

父組件

<template><div class="parent" @click="getData">我是父組件<!--父組件監聽子組件觸發的transData方法,調用自己的transData方法--><!--通過ref標記子組件--><children ref="child" @transData="transData"></children></div></template><script>import Children from './children.vue'export default {data () {return {msg: 'hello, children'}},methods: {getData(){// 調用子組件的getData方法this.$refs.child.getData();},// 參數就是子組件傳遞出來的數據transData(msg){console.log(msg) // hello, parent}},// 引入子組件components:{children: Children}}</script>

子組件

<template><div class="hello"><div class="children" >我是子組件<div>子組件的數據:{{childrenSay}}</div></div></div></template><script>export default {data () {return {childrenSay: 'hello, parent'}},methods: {// 子組件通過emit方法觸發父組件中定義好的函數,從而將子組件中的數據傳遞給父組件getData() {this.$emit('transData' , this.childrenSay);}}}</script>

另一種情況思路也和這個一樣,基礎就在與父通信子和子通信父的靈活運用。

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對武林網的支持。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 深泽县| 中牟县| 垫江县| 离岛区| 山丹县| 耒阳市| 玉环县| 绥阳县| 肇源县| 红安县| 乐至县| 洛川县| 平陆县| 旺苍县| 玉门市| 祁连县| 阳山县| 汕尾市| 云梦县| 安西县| 临武县| 广丰县| 琼中| 平阴县| 昭平县| 正安县| 紫金县| 浦县| 连平县| 巴马| 大荔县| 阳信县| 鱼台县| 孝昌县| 锡林郭勒盟| 白银市| 沾化县| 方城县| 公安县| 宜宾市| 西贡区|