在 update 之前,我们先把 :each 地点节点大年夜 DOM 构造中去掉落,然则要留意的是并不克不及直接去掉落,而是要在去掉落的地位插入一个 comment 类型的节点作为占位符,目标是为了在我们把列表数据衬着出来后,能找回本来的地位并把它插入到 DOM 中。
那具体若何编译这个所谓的「子模板」呢,起首,我们须要遍历 :each 指令所接收的 Array 类型的数据(今朝只支撑该类型,当然你也可以增长对 Object 类型的支撑,道理是一样的);其次,我们针对该列表的每一项数据进行一次模板的编译并把衬着后的模板插入到创建的 document fragment 中,当所有全部列表编译完后再把方才创建的 comment 类型的┞芳位符调换为 document fragment 以完成列表的衬着。
此时,我们可以这么应用 :each 指令:
- Compile(`<li :each="comments" data-index="{{ index }}">{{ item.content }}</li>`, {
- comments: [{
- content: `Hello World.`,
- }, {
- content: `Just Awesome.`,
- }, {
- content: `WOW, Just WOW!`,
- }],
- });
会衬着成:
- <li data-index="0">Hello World.</li>
- <li data-index="1">Just Awesome.</li>
- <li data-index="2">WOW, Just WOW!</li>
其实细心的话你会发明,模板中应用的 item 和 index 变量其实就是 :each 更新函数中 Compile(template, data) 编译器里的 data 值的两个 key 值。所以要自定义这两个变量也是异常简单的:
- // :each updater
- import Compile from 'path/to/compile.js';
- export default {
- beforeUpdate() {
- this.placeholder = document.createComment(`:each`);
- this.node.parentNode.WordStrChild(this.placeholder, this.node);
- // parse alias
- this.itemName = `item`;
- this.indexName = `
推荐阅读
曾经和格力电器董事长董明珠有10亿赌约的小米,要做空调了? 8月10日,小米智能硬件生态链企业智米科技宣布了一款售价4399元的全直流变频空调,但品牌不是“小米&rdqu>>>详细阅读
本文标题:如何实现一个基于DOM的模板引擎
地址:http://www.17bianji.com/lsqh/36664.html
1/2 1

网友点评
精彩导读
科技快报
品牌展示