国产99久久精品_欧美日本韩国一区二区_激情小说综合网_欧美一级二级视频_午夜av电影_日本久久精品视频

最新文章專題視頻專題問答1問答10問答100問答1000問答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
問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
當(dāng)前位置: 首頁 - 科技 - 知識百科 - 正文

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

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

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

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

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

1 Object.defineProperty 實現(xiàn)

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

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)聽子屬性
 Object.defineProperty(data, key, {
 enumerable: true, // 可枚舉
 configurable: false, // 不能再重寫defineProperty
 get: function() {
 return val;
 },
 set: function(newVal) {
 console.log('-------通知訂閱者--------')
 val = newVal;
 }
 });
}

2 使用Proxy實現(xiàn)

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

function observe(data) {
 if (!data || typeof data !== 'object') {
 return;
 }
 // 取出所有屬性遍歷
 Object.keys(data).forEach(function(_k) {
 // Proxy不允許綁定在非對象上
 if (data[_k] && typeof data[_k] === 'object') {
 data[_k] = defineReactive(data[_k]);
 }
 });
}

function defineReactive(data) {
 return new Proxy(data, {
 set(target, key, value, proxy) {
 // 進行數(shù)組操作時,會進行兩次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)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

文檔

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

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

最新推薦

猜你喜歡

熱門推薦

專題
Top
主站蜘蛛池模板: 精品一区二区三区免费观看 | 精品二区 | 欧美日韩国产在线播放 | 另类专区另类专区亚洲 | 久久精品一区二区三区四区 | 精品国产欧美一区二区三区成人 | 亚洲精品国产字幕久久vr | 九九久久精品国产 | 中文字幕有码在线播放 | 国产无卡一级毛片aaa | 天堂va欧美ⅴa亚洲va一国产 | 国产一区在线看 | 国产高清在线免费 | 精品免费久久久久国产一区 | 日韩区在线 | 亚洲欧美日韩另类在线专区 | 国产日产精品_国产精品毛片 | 美女一级a毛片免费观看 | 欧美精品一区二区在线观看播放 | 欧美精品一区二区三区在线 | 成人午夜精品久久久久久久小说 | 国产一区二区在线视频 | 久久久久成人精品一区二区 | 国产高清在线播放免费观看 | 免费黄色网址在线观看 | 香蕉乱码成人久久天堂爱免费 | 国产激情视频一区二区三区 | 91在线 一区 二区三区 | 国产又大又粗又猛又爽的视频 | 欧美一区二区日韩一区二区 | 久久精品国产精品亚洲综合 | 欧美日本中文字幕 | 日韩视频中文字幕专区 | 日韩 欧美 亚洲 | 国产精品成 | 波多野结衣网站 | 国产小视频在线免费观看 | 日日草视频 | 久久成人国产精品一区二区 | 亚洲 欧美综合小说区图片区 | 日韩欧美精品一区二区 |