vue父子組件的傳值總結


久違的博客園我又回來了。此篇文章寫得是vue父子組件的傳值,雖然網上已經有很多了。寫此文章的目的就是記錄下個人學習的一部分。接下來我們就進入主題吧!

在開發vue項目中,父子組件的傳值是避免不掉的。

情況一:父組件給子組件傳值方法,使用props

父頁面:parent.vue

 1 <template>
 2     <div class="sidebar_contianer">
 3         <sidebar-item :routerData="transmitData"></sidebar-item>
 4     </div>
 5 </template>
 6 <script>
 7 import sidebarItem from './sidebarItem'
 8 export default {
 9     data(){
10         return{
11             transmitData:{
12                 title:'首頁',
13                 uuid:'123'
14             }
15         }
16     },
17     components:{
18         sidebarItem
19     }
20 }
21 </script>

 

第一步:用import引入子組件

第二步:在components中注入子組件

第三步:在子組件中定義一個指令:routerData="transmitData"  (routerData名稱需要和子組件中的props保持一致,transmitData是要傳遞給子組件的數據)

子頁面:child.vue

 1 <script>
 2 export default {
 3     name:'sidebarItem',
 4     props:{
 5         transmitData:{
 6             type:Object,
 7             default:null
 8         }
 9     }
10 }
11 </script>

第四步:在子組件中定義props屬性,transmitData的type可以自定義類型(但是必須和父組件中的數據類型一致,否則會報錯),default是默認值。

 

情況二:子組件要給父組件傳值方法,使用$emit


子頁面:a.vue

<template> 
    <div class="testCom">
        <input type="text" v-model="message" />
        <button @click="click">發送消息給爸爸</button>
    </div>
</template>
<script>
export default {
    data() {
        return {
          message: '我是來自子組件的消息'
        }
    },
    methods: {
      click() {
            //1、childFn 組件方法名,父組件中用childFn方法接收子組件中的數據;2、message是傳遞給父組件的數據
            this.$emit('childFn', this.message);
        }
    }    
}
</script>

第一步:this.$emit("方法名","傳遞給父組件的數據")

父頁面:b.vue

<template>
    <div>
      <child-com @childFn="parentFn"></child-com>
    </div>
</template>

<script>
export default {
    // ...
    data: {
        message: ''
    },
    methods: {
       parentFn(childData) {
        this.message = childData;
      }
    }
}
</script>

第二步:父組件中注入子組件(此處代碼中省略,如要參考請看情況一)

第三步:定義方法childFn(必須和子組件中方法名一致),parentFn定義可隨意。

注: 大型的項目如果用以上兩種方法傳遞值,耦合性大。所以大型項目還是的用vuex對狀態進行管理。


免責聲明!

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



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