• <fieldset id="8imwq"><menu id="8imwq"></menu></fieldset>
  • <bdo id="8imwq"><input id="8imwq"></input></bdo>
    最新文章專題視頻專題問(wèn)答1問(wèn)答10問(wèn)答100問(wèn)答1000問(wèn)答2000關(guān)鍵字專題1關(guān)鍵字專題50關(guān)鍵字專題500關(guān)鍵字專題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關(guān)鍵字專題關(guān)鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
    問(wèn)答文章1 問(wèn)答文章501 問(wèn)答文章1001 問(wèn)答文章1501 問(wèn)答文章2001 問(wèn)答文章2501 問(wèn)答文章3001 問(wèn)答文章3501 問(wèn)答文章4001 問(wèn)答文章4501 問(wèn)答文章5001 問(wèn)答文章5501 問(wèn)答文章6001 問(wèn)答文章6501 問(wèn)答文章7001 問(wèn)答文章7501 問(wèn)答文章8001 問(wèn)答文章8501 問(wèn)答文章9001 問(wèn)答文章9501
    當(dāng)前位置: 首頁(yè) - 科技 - 知識(shí)百科 - 正文

    vue使用Proxy實(shí)現(xiàn)雙向綁定的方法示例

    來(lái)源:懂視網(wǎng) 責(zé)編:小采 時(shí)間:2020-11-27 21:59:45
    文檔

    vue使用Proxy實(shí)現(xiàn)雙向綁定的方法示例

    vue使用Proxy實(shí)現(xiàn)雙向綁定的方法示例:前言:vue3.0要用Proxy來(lái)實(shí)現(xiàn)雙向綁定,因此先來(lái)嘗試一下實(shí)現(xiàn)方法。 1 Object.defineProperty 實(shí)現(xiàn) 原來(lái)vue2的實(shí)現(xiàn)使用Object.defineProperty,監(jiān)聽(tīng)set,但對(duì)于數(shù)組直接下標(biāo)給數(shù)組設(shè)置值監(jiān)聽(tīng)不了。 function observe(data) { i
    推薦度:
    導(dǎo)讀vue使用Proxy實(shí)現(xiàn)雙向綁定的方法示例:前言:vue3.0要用Proxy來(lái)實(shí)現(xiàn)雙向綁定,因此先來(lái)嘗試一下實(shí)現(xiàn)方法。 1 Object.defineProperty 實(shí)現(xiàn) 原來(lái)vue2的實(shí)現(xiàn)使用Object.defineProperty,監(jiān)聽(tīng)set,但對(duì)于數(shù)組直接下標(biāo)給數(shù)組設(shè)置值監(jiān)聽(tīng)不了。 function observe(data) { i

    前言:vue3.0要用Proxy來(lái)實(shí)現(xiàn)雙向綁定,因此先來(lái)嘗試一下實(shí)現(xiàn)方法。

    1 Object.defineProperty 實(shí)現(xiàn)

    原來(lái)vue2的實(shí)現(xiàn)使用Object.defineProperty,監(jiān)聽(tīng)set,但對(duì)于數(shù)組直接下標(biāo)給數(shù)組設(shè)置值監(jiān)聽(tīng)不了。

    function observe(data) {
     if (!data || typeof data !== 'object') {
     return;
     }
     // 取出所有屬性遍歷
     Object.keys(data).forEach(function(key) {
     defineReactive(data, key, data[key]);
     });
    };
    
    function defineReactive(data, key, val) {
     observe(val); // 監(jiān)聽(tīng)子屬性
     Object.defineProperty(data, key, {
     enumerable: true, // 可枚舉
     configurable: false, // 不能再重寫(xiě)defineProperty
     get: function() {
     return val;
     },
     set: function(newVal) {
     console.log('-------通知訂閱者--------')
     val = newVal;
     }
     });
    }
    
    

    2 使用Proxy實(shí)現(xiàn)

    使用Proxy實(shí)現(xiàn)原理主要是new一個(gè)Proxy對(duì)象,代理你的data值,需要注意的一點(diǎn)是,對(duì)于數(shù)組的方法操作來(lái)說(shuō),會(huì)產(chǎn)生兩次賦值操作,一次是添加值,一次是改變他的length值,而對(duì)于Object.defineProperty監(jiān)聽(tīng)不到的數(shù)組下標(biāo)給數(shù)組設(shè)置值,Proxy是可以監(jiān)聽(tīng)到的。

    function observe(data) {
     if (!data || typeof data !== 'object') {
     return;
     }
     // 取出所有屬性遍歷
     Object.keys(data).forEach(function(_k) {
     // Proxy不允許綁定在非對(duì)象上
     if (data[_k] && typeof data[_k] === 'object') {
     data[_k] = defineReactive(data[_k]);
     }
     });
    }
    
    function defineReactive(data) {
     return new Proxy(data, {
     set(target, key, value, proxy) {
     // 進(jìn)行數(shù)組操作時(shí),會(huì)進(jìn)行兩次set 一次數(shù)據(jù)改變,一次length改變,兩次改變data的值是不變,因此不應(yīng)該多分發(fā)一次消息
     if (
     Object.prototype.toString.call(data) === "[object Array]" &&
     key === "length"
     ) {
     Reflect.set(target, key, value, proxy);
     return true;
     }
     observe(data);
     Reflect.set(target, key, value, proxy);
     console.log('-------通知訂閱者--------')
     return true;
     }
     });

    聲明:本網(wǎng)頁(yè)內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問(wèn)題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

    文檔

    vue使用Proxy實(shí)現(xiàn)雙向綁定的方法示例

    vue使用Proxy實(shí)現(xiàn)雙向綁定的方法示例:前言:vue3.0要用Proxy來(lái)實(shí)現(xiàn)雙向綁定,因此先來(lái)嘗試一下實(shí)現(xiàn)方法。 1 Object.defineProperty 實(shí)現(xiàn) 原來(lái)vue2的實(shí)現(xiàn)使用Object.defineProperty,監(jiān)聽(tīng)set,但對(duì)于數(shù)組直接下標(biāo)給數(shù)組設(shè)置值監(jiān)聽(tīng)不了。 function observe(data) { i
    推薦度:
    標(biāo)簽: VUE 的方式 的方
    • 熱門(mén)焦點(diǎn)

    最新推薦

    猜你喜歡

    熱門(mén)推薦

    專題
    Top
    主站蜘蛛池模板: 99久久精品免费| 久久99精品久久久久子伦| 综合人妻久久一区二区精品| 国産精品久久久久久久| 精品国产污污免费网站入口| 国产精品无码无需播放器| 国产精品成人不卡在线观看| 中文字幕亚洲精品资源网| 国产午夜精品一区二区三区小说| 99re这里只有精品热久久| 国产精品嫩草影院一二三区| 久久精品成人一区二区三区| 久久99国产精品二区不卡| 国产精品电影在线| 99精品在线播放| 久久精品天天中文字幕人妻| 亚洲一区无码精品色| 国产精品一久久香蕉国产线看观看| 久久精品国产亚洲Aⅴ蜜臀色欲| 91av国产精品| 久久精品国产只有精品2020| 久久久久久久久久久免费精品| 老司机99精品99| 99在线热播精品免费99热| AAA级久久久精品无码片| 国产一级精品高清一级毛片 | 国产欧美精品专区一区二区| 亚洲精品成人在线| 国产成人亚洲精品| 国产精品视频色拍拍| 精品成在人线AV无码免费看| 国产亚洲精品AA片在线观看不加载| 国产精品成人va在线观看| 国产精品国产三级专区第1集| 98视频精品全部国产| 国产精品福利一区二区| 国产一区二区精品久久| 免费精品一区二区三区第35 | 日韩精品专区AV无码| 国产成人久久精品二区三区| 国内精品久久久久久野外|