Vue之mustache模板引擎

2021-10-12 21:20:09 字數 3973 閱讀 9394

中高階前端、leader職位必會底層知識

vue原始碼非常龐大,各種機理很多:模板技術、資料劫持、虛擬節點、最小量更新、抽象語法樹……

手寫底層原始碼,拒絕紙上談兵,讓同學能實打實的提公升程式設計

核心機理是共通的、永恆的。

lang

="en"

>

>

charset

="utf-8"

>

name

="viewport"

content

="width=device-width, initial-scale=1.0"

>

>

mustachetitle

>

head

>

>

"list"

>

ul>

>

var arr =[,

,]var list = document.

getelementbyid

('list'

)for

(var i=

0,len = arr.length;i++i)

script

>

body

>

html

>

for

(var i=

0,len = arr.length;i++i)

for

(var i=

0,len = arr.length;i++i)

的基本資訊

姓名:$

年齡:$

性別:$

`}

>

"list"

>

ul>

src=

"">

script

> }

="hd"

>

}的基本資訊<

/div>

="bd"

>

姓名:}

<

/p>

年齡:}

<

/p>

性別:}

<

/p>

<

/div>

<

/li>

}script

>

>

var data =,,

]}var list = document.

getelementbyid

('list'

)var tmpstr = document.

getelementbyid

('tmpstr'

).innertext ;

// 這樣把模板放到乙個script (type 不能是能執行的指令碼型別就行)

document.

getelementbyid

('list'

).innerhtml = mustache.

render

(tmpstr,data)

script

>

body

>

function

render

(templatestr, data)

\}/g

,function

(findstr, $1

))

function

(global, factory)

(this

,function()

)

class

scanner

scan

(stoptag:

string):

void

}// 走過指定的內容,沒有返回值

// 讓指標進行掃瞄,直到遇見指定的內容結束,並且能夠返回結束之前路過的文字

scanutil

(stoptag:

string):

string

return

this

.templatestr.

substring

(pos_backup,

this

.pos)

}// 判斷指標是否走到了頭

eos():

boolean

}function

nesttokens

(tokens)

}return nestedtokens

}function

parsetemplatetotokens

(templatestr:

string

) scanner.

scan

('}')if

(words!=='')

else

if(words[0]

==='/'

)else

} scanner.

scan

('}}')}

return

nesttokens

(tokens)

}// 將模板字串轉成tokens陣列

function

lookup

(dataobj, keyname:

string

)return temp

}return dataobj[keyname]

// 沒有'.'

}// 處理級聯屬性 'a.b'

function

parsearray

(token, data)),

'.': v[i]})

}return resultstr

}// 處理陣列渲染

function

rendertemplate

(tokens:

, data:|[

])else

if(token[0]

==='name'

)else

if(token[0]

==='#')}

return resultstr

}// 將tokens陣列轉成dom字串

function

render

(templatestr, data)

lang

="en"

>

>

charset

="utf-8"

>

name

="viewport"

content

="width=device-width, initial-scale=1.0"

>

>

mustachetitle

>

head

>

>

div>

src=

"ts/mustache.js"

>

script

>

>

var templatestr =

` }

學生} 好朋友是} 自己的愛好是}}

}}`var data =},

}]} document.

getelementbyid

("container"

).innerhtml =

render

(templatestr,data)

script

>

body

>

html

>

vue原始碼之mustache模板引擎庫

1.模板引擎 將資料變為檢視最優雅的解決方案 模板引擎庫 mustache 模板 資料 使用 不迴圈 陣列巢狀 布林值 2.機制 tokens是模板字串的js表示。3.模板字串到token中,採用 入棧 出棧的思想,巢狀陣列的children 模板字串的拼接,採用指標的跳轉,轉換成toke的js表示...

Vue模板語法 mustache語法列表渲染 事件

vue模板語法 mustache語法 雙大括號語法 1.指令 vue 指令 作用 是用來操作dom的,指令就是繫結在dom身上的乙個屬性,這個屬性具備一定的功能,這個功能用來操作dom 以後我們不在像以前一樣,先獲取dom,在操作了,我們現在可以直接使用指令來操作dom 這個指令需要模板語法的支援,...

前端模板 mustache

最近因工作需要接觸到mustache.mustache 模板語法的邏輯比較簡單。它用於html,配置檔案,源 等。它的工作方式是通過通過以雜湊值或者物件的方式擴充套件模板標籤。mustache.js 1.簡單的變數調換 示例如下 var data mustache.render is awesome...