<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 19:50:31
        文檔

        vue數據傳遞方法總結

        vue數據傳遞方法總結:這次給大家帶來vue數據傳遞方法總結,vue數據傳遞的注意事項有哪些,下面就是實戰案例,一起來看一下。前言最近碰到了比較多的關于vue的eventBus的問題,之前定技術選型的時候也被問到了,vuex和eventBus的使用范圍。所以簡單的寫一下。同時有一種特殊的實現
        推薦度:
        導讀vue數據傳遞方法總結:這次給大家帶來vue數據傳遞方法總結,vue數據傳遞的注意事項有哪些,下面就是實戰案例,一起來看一下。前言最近碰到了比較多的關于vue的eventBus的問題,之前定技術選型的時候也被問到了,vuex和eventBus的使用范圍。所以簡單的寫一下。同時有一種特殊的實現

        這次給大家帶來vue數據傳遞方法總結,vue數據傳遞的注意事項有哪些,下面就是實戰案例,一起來看一下。

        前言

        最近碰到了比較多的關于vue的eventBus的問題,之前定技術選型的時候也被問到了,vuex和eventBus的使用范圍。所以簡單的寫一下。同時有一種特殊的實現方案。

        有這么幾種數據傳遞方式,vuex、props、eventBus和特殊的eventBus。

        vuex

        不介紹,數據量和復雜度達不到不用它你才會向下看。

        props

        demo

        父子組件傳值,官方api,只寫個demo。

        1.父組件

        <son :info="info" @update="updateHandler"/>
        // data
        info: 'sendToSon'
        // methods
        updateHandler (newVal) {
         this.info = newVal
        }

        2.子組件

        // props
        props: ['info']
        // 向上傳值,某個方法中使用
        this.$emit('update', 'got')

        父向子傳值-->props 子向父傳值-->子組件綁定事件回調定義在父組件,子組件觸發此事件。 因不推薦子組件內直接修改父組件傳入的props,需使用自定義事件。

        限制

        父子組件。

        eventBus

        demo

        bus皆為導入的bus實例

        // bus
        const bus = new Vue()
        // 數據接收組件
        // 當前組件接收值則
        bus.$on('event1', (val)=>{})
        // 數據發出組件
        // 當前組件發出值則
        bus.$emit('event1', val)

        可以看出本質是一個vue實例充當事件綁定的媒介。 在所有實例中使用其進行數據的通信。

        雙(多)方使用同名事件進行溝通。

        問題

        1. $emit時,必須已經 $on,否則將無法監聽到事件,也就是說對組件是有一定的同時存在的要求的。(注:路由切換時,新路由組件先 created,舊路由組件再destoryed,部分情況可以分別寫入這兩個生命周期,見此問題)。

        2. $on在組件銷毀后不會自動解除綁定,若同一組件多次生成則會多次綁定事件,則會一次 $emit,多次響應,需額外處理。

        3. 數據非“長效”數據,無法保存,只在 $emit后生效。

        所以是否有一種更適用的方案呢?

        特殊的eventBus?

        demo

        我們先來看個代碼,線上代碼。 bus皆為導入的bus實例。

        // bus
        const bus = new Vue({
         data () {
         return {
         // 定義數據
         val1: ''
         }
         },
         created () {
         // 綁定監聽
         this.$on('updateData1', (val)=>{
         this.val1 = val
         })
         }
        })
        // 數據發出組件
        import bus from 'xx/bus'
        // 觸發在bus中已經綁定好的事件
        bus.$emit('update1', '123')
        // 數據接收組件
        {{val1}}
        // 使用computed接收數據
        computed () {
         val1 () {
         // 依賴并返回bus中的val1
         return bus.val1
         }
        }

        不同

        1. 正統的eventBus只是用來綁定和觸發事件,并不關心數據,不與數據發生交集。而這個方案多一步將數據直接添加在bus實例上。且事件監聽與數據添加需提前定義好。

        2. 數據接收方不再使用$on來得知數據變化,而是通過計算屬性的特征被動接收。

        解決的問題

        通信組件需同時存在?數據在bus上存儲,所以沒有要求。

        多次綁定?綁定監聽都在bus上,不會重復綁定。

        數據只在$emit后可用?使用計算屬性直接讀取存在bus上的值,不需要再次觸發事件。

        探討

        為什么使用計算屬性

        其實應該是為什么不能直接添加到data上,如 data1: bus.data1?我們可以再看一段代碼,線上代碼。 將bus修改為

        data () {
         return {
         // 多一層結構
         val: {
         result: 0
         }
         }
        },
        created () {
         this.$on('update1', val => {
         console.log('觸發1', i1++)
         this.val.result = val
         })
        }

        數據接收組件改為

        // template
        data中獲取直接修改值:{{dataResult}}
        data中獲取直接修改值的父層:{{dataVal}}
        computed中依賴直接修改值:{{computedResult}}
        // js
        data () {
         return {
         // 獲取直接修改值
         dataResult: bus.val.result,
         // 獲取直接修改值的父層
         dataVal: bus.val
         }
         },
         computed: {
         computedResult () {
         // 依賴直接修改值
         return bus.val.result
         }
         }

        可以看到,data中獲取直接修改值值的數據是無法動態響應的。

        為什么要用事件

        其實不用 $emit觸發,使用 bus.val = 1直接賦值也是可以的,那么為什么不這么做呢?

        簡化版的vuex

        其實這種eventBus就是簡化版的vuex。 vue文檔中有這樣一段話:

        組件不允許直接修改屬于 store 實例的 state,而應執行 action 來分發 (dispatch) 事件通知 store 去改變,我們最終達成了 Flux 架構。這樣約定的好處是,我們能夠記錄所有 store 中發生的 state 改變。

        store對應 bus實例, state對應 data, action對應 事件, dispatch對應 $emit。 同時vuex中組件獲取數據的方式正是通過計算屬性,那么其實vuex和Flux架構的理解和使用也沒有那么難不是嗎。

        相信看了本文案例你已經掌握了方法,更多精彩請關注Gxl網其它相關文章!

        推薦閱讀:

        用JS檢測電腦配置(附代碼)

        怎樣自定義設置vue項目打開關閉eslint校驗

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

        文檔

        vue數據傳遞方法總結

        vue數據傳遞方法總結:這次給大家帶來vue數據傳遞方法總結,vue數據傳遞的注意事項有哪些,下面就是實戰案例,一起來看一下。前言最近碰到了比較多的關于vue的eventBus的問題,之前定技術選型的時候也被問到了,vuex和eventBus的使用范圍。所以簡單的寫一下。同時有一種特殊的實現
        推薦度:
        標簽: 方法 數據 VUE
        • 熱門焦點

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 免费的一级片网站| 无码高潮少妇毛多水多水免费| 免费人妻av无码专区| 亚洲日本在线电影| 女人让男人免费桶爽30分钟| 丁香婷婷亚洲六月综合色| 国产h视频在线观看免费| 亚洲精品国产摄像头| 国产成人涩涩涩视频在线观看免费 | 99在线视频免费| 老色鬼久久亚洲AV综合| 亚洲成人免费网站| 亚洲欧洲国产综合AV无码久久| 在线精品免费视频| 香港一级毛片免费看| 亚洲另类少妇17p| 国产成年无码久久久免费| 亚洲日本乱码一区二区在线二产线| 青草草色A免费观看在线| 亚洲综合av一区二区三区不卡 | 亚洲熟妇丰满xxxxx| 大胆亚洲人体视频| 国产免费一区二区三区在线观看 | 亚洲AV无码乱码在线观看裸奔| 小日子的在线观看免费| 亚洲av乱码一区二区三区 | 免费A级毛片无码A∨| 亚洲一区二区三区久久久久| 四虎永久在线精品免费影视| 国产福利免费视频 | 亚洲资源在线视频| 免费看香港一级毛片| 国产免费人成视频在线播放播| 亚洲精品日韩专区silk| 国产亚洲福利一区二区免费看| 叮咚影视在线观看免费完整版| 亚洲狠狠成人综合网| 亚洲一本大道无码av天堂| 亚洲视频免费观看| 国产99精品一区二区三区免费| 亚洲乱码一区av春药高潮|