<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
        問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
        當前位置: 首頁 - 科技 - 知識百科 - 正文

        vue組件中的數據傳遞方法

        來源:懂視網 責編:小采 時間:2020-11-27 22:14:53
        文檔

        vue組件中的數據傳遞方法

        vue組件中的數據傳遞方法:Vue 的組件作用域都是孤立的,不允許在子組件的模板內直接引用父組件的數據。必須使用特定的方法才能實現組件之間的數據傳遞。組件之間傳遞數據大致分為三種情況: 父組件向子組件傳遞數據,通過 props 傳遞數據。 子組件向父組件傳遞數據,通過 event
        推薦度:
        導讀vue組件中的數據傳遞方法:Vue 的組件作用域都是孤立的,不允許在子組件的模板內直接引用父組件的數據。必須使用特定的方法才能實現組件之間的數據傳遞。組件之間傳遞數據大致分為三種情況: 父組件向子組件傳遞數據,通過 props 傳遞數據。 子組件向父組件傳遞數據,通過 event

        一、父組件向子組件傳遞數據

        子組件部分:

        <template>
         <div class="child">
         {{ msg }}
         </div>
        </template>
        <script>
        export default {
         name: 'child',
         data(){
         return {
         
         }
         },
         props: ['msg']
        </script>

        在child.vue中,msg實在data中定義的變量,使用props:['msg']從父組件中獲取msg的值

        父組件部分:

        <template>
         <div class="child">
         child
         <child :msg="message"></child>
         </div>
        </template>
        <script>
        import child from './child.vue'
        export default {
         name: 'parent',
         components: { child },
         data () {
         return {
         message: 'hello vue'
         }
         }
        }
        </script>

        在調用組件的時候,使用v-bind將msg的值綁定為parent.vue中定義的變量message,這樣就能將parent.vue中的message的值傳給child.vue了。

        單項數據流

        當父組件的 message 發生改變,子組件也會自動地更新視圖。但是在子組件中,我們不要去修改 prop。如果你必須要修改到這些數據,你可以使用以下方法:

        方法一:把 prop 賦值給一個局部變量,然后需要修改的話就修改這個局部變量,而不影響 prop

        export default {
         data(){
         return {
         newMessage: null
         } 
         },
         props: ['message'],
         created(){
         this.newMessage = this.message;
         }
        }

        方法二:在計算屬性中對 prop 進行處理

        export default {
         props: ['message'],
         computed: {
         newMessage(){
         return this.message + ' 哈哈哈';
         }
         }
        }

        二、子組件向父組件傳遞數據

        子組件主要通過實踐傳遞數據給父組件的

        子組件部分:

        <template>
         <div class="child">
         <span>用戶名:</span>
         <input v-model="username" @change="sendUser" />
         </div>
        </template>

        子組件的html中,當input中的值發生改變時,將username傳遞給parent.vue。

        首先聲明了一個sendUser方法,用change事件來調用sendUser。

        <script>
         export default {
         name: 'parend',
         data () {
         return {
         username: ''
         }
         },
         methods: {
         sendUser () {
         this.$emit('changeName', this.username)
         }
         }
        }
        </script>

        在sendUser中,使用$emit來遍歷changeName事件,并返回this.name,其中changeName是一個自定義的事件,功能類似于一個中轉,this.name將通過這個事件傳遞給父組件。

        父組件部分:

        <template>
         <div class="parent">
         <child @changeName="getUser"></child>
         <p>用戶名:{{user}}</p>
         </div>
        </template>

        在父組件中聲明了一個getUser方法,用changeName事件調用getUser方法,獲取從子組件傳遞過來的參數username

        <script>
        import child from './child.vue'
        export default {
         name: 'parent',
         components: { child },
         data () {
         return {
         user: ''
         }
         },
         methods: {
         getUser(data) {
         this.user = data
         }
         }
        }
        </script>

        getUser方法中的參數msg就是從子組件中傳遞過來的參數uesrname。

        三、同級組件間的數據傳遞

        有時候兩個組件也需要通信(非父子關系)。當然Vue2.0提供了Vuex,但在簡單的場景下,可以使用一個空的Vue實例作為中央事件總線。

        <template>
         <div id="app">
         <c1></c1> //組件1
         <c2></c2> //組件2
         </div>
        </template>

        組件c1中:

        <template>
         <div class="c1">
         page
         <button @click="changeMsg">click</button>
         </div>
        </template>
        <script>
        var Bus = new Vue(); //為了方便將Bus(空vue)定義在一個組件中,在實際的運用中一般會新建一Bus.js
        export default {
         name: 'c1',
         data () {
         return {
         message: 'hi'
         }
         },
         methods: {
         changeMsg () { //點擊按鈕,將this.message傳遞給c2
         bus.$emit('sendMsg', this.message)
         }
         }
        }
        </script>

        組件c2中:

        <template>
         <div class="c2">
         {{msg}}
         </div>
        </template>
        
        <script>
        var Bus = new Vue();
        
        export default {
         name: 'c2',
         data () {
         return {
         msg: ''
         }
         },
         created () {
         bus.$on('sendMsg',(data)=>{ //data即為c1組件中的message
         this.msg = data
         })
         }
        }
        </script>

        在實際運用中,一般將bus抽離出來:

        //Bus.js
        import Vue from 'vue'
        const Bus = new Vue()
        expore default Bus

        組件調用時引用(import Bus from './Bus.js')

        但這種引入方式,經過webpack打包后可能會出現Bus局部作用域的情況,即引用的是兩個不同的Bus,導致不能正常通信
        實際運用:

        將Bus注入到Vue根對象中

        import Vue from 'vue'
        const Bus = new Vue()
        var app= new Vue({
         el:'#app',
           data:{
            Bus
         }  
        })

        在子組件中通過this.$root.Bus.$on(),this.$root.Bus.$emit()來調用

        總結

        以上所述是小編給大家介紹的vue組件中的數據傳遞方法,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對腳本之家網站的支持!

        聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

        文檔

        vue組件中的數據傳遞方法

        vue組件中的數據傳遞方法:Vue 的組件作用域都是孤立的,不允許在子組件的模板內直接引用父組件的數據。必須使用特定的方法才能實現組件之間的數據傳遞。組件之間傳遞數據大致分為三種情況: 父組件向子組件傳遞數據,通過 props 傳遞數據。 子組件向父組件傳遞數據,通過 event
        推薦度:
        標簽: 方法 VUE 方式
        • 熱門焦點

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 在线美女免费观看网站h| 一区二区视频免费观看| 日本免费网站视频www区| 久久久影院亚洲精品| 叮咚影视在线观看免费完整版| 亚洲中文久久精品无码| 成全视成人免费观看在线看| 中文字幕亚洲一区二区va在线| 精品无码一级毛片免费视频观看 | 亚洲成AV人片在线观看WWW| 两个人看的www视频免费完整版| 中文字幕中韩乱码亚洲大片| 最近免费字幕中文大全| 在线免费观看亚洲| a级毛片无码免费真人| 亚洲AV色欲色欲WWW| 亚洲AⅤ无码一区二区三区在线| 一二三四视频在线观看中文版免费| 亚洲精品永久www忘忧草| 国产又黄又爽又猛免费app| 亚洲色成人四虎在线观看| 亚洲а∨天堂久久精品| 久草免费福利视频| 亚洲成A人片在线播放器| 亚洲精品天堂成人片?V在线播放| 国产在线观a免费观看| 亚洲最大中文字幕| 免费一级特黄特色大片在线观看| 久久久精品国产亚洲成人满18免费网站| 日韩va亚洲va欧洲va国产| 台湾一级毛片永久免费| 日韩毛片一区视频免费| 亚洲成人免费在线| 免费无码又爽又高潮视频| 91免费在线视频| 亚洲色www永久网站| 亚洲一级特黄大片在线观看| 91av视频免费在线观看| 亚洲欧好州第一的日产suv| 国产成人亚洲综合无码精品| 成人特黄a级毛片免费视频|