成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

百度前端學(xué)院學(xué)習(xí):動態(tài)數(shù)據(jù)綁定(四)

Gilbertat / 2486人閱讀

摘要:模板的語法解析匹配實際數(shù)據(jù)替換模板拆分成兩個主要是為了解決深對象的問題,目前看過別的通過都是通過并不是一個很好的方法。最后修改一下和函數(shù)

題目地址
源代碼地址

任務(wù)分析

這個任務(wù)主要是通過解析模板,替換中間出現(xiàn)的屬性,例子:

姓名:{{user.name}}

年齡:{{user.age}}

替換后:

姓名:youngwind

年齡:25

實現(xiàn) el 屬性:

主要修改一些constructor()就可以了:

constructor(json) {
  this.el = document.querySelector(json.el)
  ...
  this.html = ""

  this.each(json.data)
  ...
}

之前我們直接傳入一個對象就是data,現(xiàn)在我們需要這樣做:

const app = new Observer({
  el: "#app",
  data: {
    user: {
      name: "john",
      age: 19
    }
  }
})
解析 html 模板

解析 html 模板主要分兩塊,一個是解析模板,另外一個是用來替換數(shù)據(jù)。

templateMatch()模板的語法解析匹配:

templateMatch(temp, data) {
  this.html = temp
  
  temp.match(/{{w*(.w*)*}}|{{sw*(.w*)*s}}/g).forEach(item => {
    const key = item.slice(2, item.length - 2).trim()
    
    this.templateReplace(key, data, item)
  })
  
  this.el.innerHTML = this.html
  this.html = ""
}

templateReplace()實際數(shù)據(jù)替換模板:

templateReplace(key, data, template) {
  const index = key.indexOf(".")
  
  if (index > 0) {
    this.templateReplace(key.slice(index + 1), data[key.slice(0, index)], template)
  } else {
    console.log(template, data[key])
    this.html = this.html.replace(template, data[key]) 
  }
}

拆分成兩個主要是為了解決深對象的問題,目前看過別的通過都是通過eval()并不是一個很好的方法。

最后修改一下constructor()setter函數(shù):

constructor() {
  ...
  this.templateMatch(this.el.innerHTML, this.data)
  ...
}
convert() {
  ...
  
  Object.defineProperty(this.setData || this.data, key, {
    ...
    set: function (newValue) {
      ....
      
      this.templateMatch(this.el.innerHTML, this.data)
    }
  })
}

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/81962.html

相關(guān)文章

  • 百度前端學(xué)院學(xué)習(xí)動態(tài)數(shù)據(jù)綁定(三)

    摘要:實現(xiàn)深層次數(shù)據(jù)變化如何逐層往上傳播學(xué)習(xí)過的同學(xué)都知道,給一個元素綁定一個事件,這個元素的子元素觸發(fā)這個事件,也會同樣會觸發(fā)它的所有父元素同樣的事件。 題目地址源代碼地址 處理上個任務(wù)的問題 上個任務(wù)拋出了兩個問題,一個是在初始化一個實例的時候如果傳一個比較深的對象會被打平。把each和convert做出了一些修改: each(): each(obj, parents = []) { ...

    codeGoogle 評論0 收藏0
  • 百度前端學(xué)院學(xué)習(xí)動態(tài)數(shù)據(jù)綁定(二)

    摘要:在中添加一個用來存儲回調(diào)函數(shù)的變量實現(xiàn)和函數(shù)存儲的回調(diào)函數(shù)做法我是用一個對象去處理的,為屬性名,則是回調(diào)函數(shù)。 題目地址源代碼地址 處理深度對象 題目有個要求是如果傳入的對象是比較深的對象,也就是 value 可以能是另外一個新的對象,也是要給那個對象的屬性加上 getter 和 setter 的,我的做法就是判斷每一個值是否是對象,然后在做一次遞歸處理。 each(obj) { ...

    changfeng1050 評論0 收藏0
  • 百度前端技術(shù)學(xué)院2017學(xué)習(xí)總結(jié)

    摘要:向已被訪問的鏈接添加樣式。讓背景圖片大小水平方向擴大一倍,這樣才有移動與變化的空間。不足及改進總結(jié)來看,自己做得不夠,雖然也花了時間,不過能看出有敷衍的成分在。 一、前言 百度的前端技術(shù)學(xué)院IFE,2016年就聽說了,當時自己也報名,還組成隊伍了,不過自己一個任務(wù)也沒完成就結(jié)束了,遺憾... 關(guān)注了IFE,知道2017年2月有新的一期培訓(xùn),于是一直在等著報名,然后開始做里面發(fā)布的任務(wù)(...

    pkwenda 評論0 收藏0
  • 百度前端技術(shù)學(xué)院2017學(xué)習(xí)總結(jié)

    摘要:向已被訪問的鏈接添加樣式。讓背景圖片大小水平方向擴大一倍,這樣才有移動與變化的空間。不足及改進總結(jié)來看,自己做得不夠,雖然也花了時間,不過能看出有敷衍的成分在。 一、前言 百度的前端技術(shù)學(xué)院IFE,2016年就聽說了,當時自己也報名,還組成隊伍了,不過自己一個任務(wù)也沒完成就結(jié)束了,遺憾... 關(guān)注了IFE,知道2017年2月有新的一期培訓(xùn),于是一直在等著報名,然后開始做里面發(fā)布的任務(wù)(...

    ky0ncheng 評論0 收藏0
  • 百度前端技術(shù)學(xué)院2017學(xué)習(xí)總結(jié)

    摘要:向已被訪問的鏈接添加樣式。讓背景圖片大小水平方向擴大一倍,這樣才有移動與變化的空間。不足及改進總結(jié)來看,自己做得不夠,雖然也花了時間,不過能看出有敷衍的成分在。 一、前言 百度的前端技術(shù)學(xué)院IFE,2016年就聽說了,當時自己也報名,還組成隊伍了,不過自己一個任務(wù)也沒完成就結(jié)束了,遺憾... 關(guān)注了IFE,知道2017年2月有新的一期培訓(xùn),于是一直在等著報名,然后開始做里面發(fā)布的任務(wù)(...

    Jingbin_ 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<