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

最新文章專題視頻專題問(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數(shù)據(jù)綁定的原理

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

淺談Vue數(shù)據(jù)綁定的原理

淺談Vue數(shù)據(jù)綁定的原理:本文介紹了Vue數(shù)據(jù)綁定的原理,分享給大家,具體如下: 原理 其實(shí)原理很簡(jiǎn)單,就是攔截了Object的get/set方法,在對(duì)數(shù)據(jù)進(jìn)行set (obj.aget=18) 時(shí)去重現(xiàn)渲染視圖 實(shí)現(xiàn)方式有兩種 方式1 定義了同名的get/set就相當(dāng)于定義了age var test = {
推薦度:
導(dǎo)讀淺談Vue數(shù)據(jù)綁定的原理:本文介紹了Vue數(shù)據(jù)綁定的原理,分享給大家,具體如下: 原理 其實(shí)原理很簡(jiǎn)單,就是攔截了Object的get/set方法,在對(duì)數(shù)據(jù)進(jìn)行set (obj.aget=18) 時(shí)去重現(xiàn)渲染視圖 實(shí)現(xiàn)方式有兩種 方式1 定義了同名的get/set就相當(dāng)于定義了age var test = {

本文介紹了Vue數(shù)據(jù)綁定的原理,分享給大家,具體如下:

原理

其實(shí)原理很簡(jiǎn)單,就是攔截了Object的get/set方法,在對(duì)數(shù)據(jù)進(jìn)行set (obj.aget=18) 時(shí)去重現(xiàn)渲染視圖

實(shí)現(xiàn)方式有兩種

方式1

定義了同名的get/set就相當(dāng)于定義了age

var test = {
 _age: 18,
 get age() {
 console.log('觸發(fā)get');
 //直接會(huì)this.age會(huì)進(jìn)入死遞歸的
 return this._age;
 },
 set age(age) {
 console.log('觸發(fā)set');
 this._age = age;
 }
 };

為了讓test不顯示多余的變量,可以把_age定義在外部

var _age = 18;
 var test = {
 get age() {
 console.log('觸發(fā)get');
 //直接會(huì)this.age會(huì)進(jìn)入死遞歸的
 return _age;
 },
 set age(age) {
 console.log('觸發(fā)set');
 _age = age;
 }
 };

方式2

使用這種方式完美的解決了對(duì)象內(nèi)包含多余的變量的問(wèn)題

function test() {
 var _age = 18;
 Object.defineProperty(this, "age", {
 get: function () {
 console.log('觸發(fā)get');
 return _age;
 },
 set: function (value) {
 console.log('觸發(fā)set')
 _age = value;
 }
 });
 }
 var t = new test();
 t.age=18;

實(shí)現(xiàn)數(shù)據(jù)到視圖的綁定

這里的渲染只是一個(gè)簡(jiǎn)單的正則替換

要實(shí)現(xiàn)Vue那么強(qiáng)大的功能還要自己實(shí)現(xiàn)一個(gè)模板引擎

 

<div id="test">
 <p>name:</p>
 <p>age:</p>
</div>
function Element(id, initData) {
 var self = this;
 var el = document.getElementById(id);
 var templet = el.innerHTML;
 var _data = null;

 if (initData) {
 _data = {};
 for (var variable in initData) {
 _data[variable] = initData[variable];
 bind(variable, self);
 }
 }

 function bind(variable, obj) {
 Object.defineProperty(self, variable, {
 set: function (value) {
 //使用_data里的數(shù)據(jù),避免死遞歸
 _data[variable] = value;
 //每次被設(shè)置新值的時(shí)候重新渲染界面
 render();
 },
 get: function () {
 return _data[variable];
 },
 });
 }

 //渲染
 function render() {
 var temp = templet;
 temp = temp.replace(/\{\{(.*)\}\}/g, function (s, t) {
 if (_data[t]) {
 return _data[t];
 }
 });
 el.innerHTML = temp;
 }

 //初始化時(shí)候手動(dòng)渲染一次
 render();
}

var app = new Element('test', {
 name: 'zhangsan',
 age: 18
})

實(shí)現(xiàn)視圖到數(shù)據(jù)的綁定

這里做一個(gè)簡(jiǎn)單的input改變的事件監(jiān)聽(tīng)

每次渲染之后都要重新添加事件,用時(shí)間委托可以實(shí)現(xiàn),但是input的focus位置不能保留

可見(jiàn)Vue內(nèi)部的渲染和事件綁定肯定不是像這里demo寫(xiě)的那么簡(jiǎn)單,這里只是大致的原理(可能并不是這樣的。。)

 

<div id="test">
 <input type="text" value="">
 <br>
 <span></span>
</div>
function Element(id, initData) {
 var self = this;
 var el = document.getElementById(id);
 var templet = el.innerHTML;
 var input = el.getElementsByTagName('input')[0];
 var _data = initData;

 Object.defineProperty(self, 'data', {
 set: function (value) {
 _data = value;
 render();
 },
 get: function () {
 return _data;
 },
 });

 //渲染
 function render() {
 var temp = templet;
 temp = temp.replace(/\{\{(data)\}\}/g, function (s, t) {
 return _data;
 });
 el.innerHTML = temp;

 //重新添加事件,其實(shí)應(yīng)該用事件委托的
 input = el.getElementsByTagName('input')[0];
 inputchange();
 input.focus();
 }

 function inputchange() {
 if (window.attachEvent) {
 input.attachEvent("oninput", temp);
 } else if (window.addEventListener) {
 input.addEventListener("input", temp, false);
 }

 function temp() {
 self.data = input.value;
 }
 }

 //初始化時(shí)候手動(dòng)渲染一次
 render();
}
var app = new Element('test', '');

聲明:本網(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數(shù)據(jù)綁定的原理

淺談Vue數(shù)據(jù)綁定的原理:本文介紹了Vue數(shù)據(jù)綁定的原理,分享給大家,具體如下: 原理 其實(shí)原理很簡(jiǎn)單,就是攔截了Object的get/set方法,在對(duì)數(shù)據(jù)進(jìn)行set (obj.aget=18) 時(shí)去重現(xiàn)渲染視圖 實(shí)現(xiàn)方式有兩種 方式1 定義了同名的get/set就相當(dāng)于定義了age var test = {
推薦度:
標(biāo)簽: 綁定 數(shù)據(jù) 原理
  • 熱門(mén)焦點(diǎn)

最新推薦

猜你喜歡

熱門(mén)推薦

專題
Top
主站蜘蛛池模板: 欧美日韩亚洲一区二区三区在线观看 | 国产日产高清欧美一区二区三区 | 国产伦精品一区二区三区 | 国产精品免费看 | 一区二区三区精品 | 国产成人三级经典中文 | 国产精品亚洲精品日韩动图 | 最新国产在线播放 | 欧美日韩一本 | 日韩欧美精品在线观看 | 日韩精品欧美一区二区三区 | 日韩在线播放一区 | 欧美激情一区二区三区视频 | 国产免费一区二区三区香蕉精 | 亚洲 欧美 日韩 小说 另类 | 久久久久免费精品国产小说 | 亚洲十欧美十日韩十国产 | 国产精美视频 | 日本a级精品一区二区三区 日本不卡视频一区二区三区 | 国产a久久精品一区二区三区 | 福利视频欧美一区二区三区 | 免费国产小视频在线观看 | 欧美日韩视频一区二区三区 | 成人a区 | 欧美整片第一页 | 国产日韩视频一区 | 国产精品美女一区二区 | 亚洲精国产一区二区三区 | 午夜视频免费在线观看 | 欧美视频一区二区三区在线观看 | 自拍偷拍日韩 | 国产a视频精品免费观看 | 在线播放一区二区三区 | 国产精品va一级二级三级 | 亚洲国产精品成人综合久久久 | 久久免费视频观看 | 日韩不卡一区 | 成人免费国产欧美日韩你懂的 | 久久久久国产成人精品亚洲午夜 | 亚洲性一区 | 与子乱刺激对白在线播放 |