# 数据变为视图方法
| const data = [ |
| { tag: 'li', name: 'lain', age: 16 }, |
| { tag: 'li', name: 'saber', age: 17 }, |
| { tag: 'li', name: '樱岛麻衣', age: 16 }, |
| { tag: 'li', name: '稚名真白', age: 17 } |
| ] |
# 纯 DOM 法
| for (const key of data) { |
| |
| const list = document.querySelector("#list") |
| |
| |
| const li = document.createElement(key.tag) |
| |
| |
| li.textContent = key.name + key.age |
| |
| |
| list.appendChild(li) |
| } |
# 数组 Join 法
- 这是曾经非常流行的方法,是曾经前端必会的知识
join
方法合并数组的元素并返回一个字符串
| data.forEach(item => { |
| list.innerHTML += [ |
| '<li>姓名:' + item.name + ' 年龄: ' + item.age + '</li>', |
| ].join('') |
| }) |
# ES6 反引导法
- 这是 ES6 的模板字符串,可以直接换行并可以将遍历用
${}
形式放入
| data.forEach(item => { |
| list.innerHTML += ` |
| <li> |
| <span>姓名:${item.name}</span> |
| <span>年龄:${item.age}</span> |
| </li> |
| ` |
| }) |
# 模板引擎 Mustache
| <script src="https://cdn.bootcdn.net/ajax/libs/mustache.js/4.1.0/mustache.js"></script> |
# 基本用法, 不循环直接进行使用
| |
| const templateStr = `<h1>我喜欢吃{{ peach }}</h1>` |
| |
| |
| const fruit = { peach: '桃子' } |
| |
| |
| const domStr = Mustache.render(templateStr, fruit) |
| |
| console.log(domStr) |
| |
| container.innerHTML = domStr |
# 循环对象
- 先定义变量接收对象类型数据 对象中定义一个数组类型,它的名字决定了
{{#arr}}
这里面要写的名字
- 定义变量接收模板字符串 里面与
反引导法
写法一样,写标签
- 调用
Mustache.render
方法,参数一:模板字符串变量,参数二:数据类型变量,渲染返回一组新的字符串
- 最后进行挂载,下面来进行演示
| |
| const data = { |
| arr: [ |
| { tag: 'li', name: 'lain', age: 16 }, |
| { tag: 'li', name: 'saber', age: 17 }, |
| { tag: 'li', name: '樱岛麻衣', age: 16 }, |
| { tag: 'li', name: '稚名真白', age: 17 } |
| ] |
| } |
| |
| const templateStr = ` |
| <ul> |
| {{#arr}} |
| <li> |
| <span>姓名:{{ name }}</span> |
| <span>年龄:{{ age }}</span> |
| </li> |
| {{/arr}} |
| </ul> |
| ` |
| |
| const domStr = Mustache.render(templateStr, data) |
| |
| |
| container.innerHTML = domStr |
| |
| <ul> |
| <li> |
| <span > 姓名:lain</span> |
| <span > 年龄:16</span> |
| </li> |
| <li> |
| <span > 姓名:saber</span> |
| <span > 年龄:17</span> |
| </li> |
| <li> |
| <span > 姓名:樱岛麻衣 & lt;/span> |
| <span > 年龄:16</span> |
| </li> |
| <li> |
| <span > 姓名:稚名真白 & lt;/span> |
| <span > 年龄:17</span> |
| </li> |
| </ul> |
| */ |
# 循环简单数组
| |
| const fruits = { |
| fruits: ['peach', 'watermelon', 'cherry'] |
| |
| |
| const templateStr = ` |
| <ul> |
| {{ #fruits }} |
| <li>{{ . }}</li> // 因为这里是简单的数组 直接用 . 即可 |
| {{ /fruits }} |
| </ul> |
| ` |
| |
| const domStr = Mustache.render(templateStr, fruits) |
| console.log(domStr) |
| |
| <ul> |
| <li>peach</li> |
| <li>watermelon</li> |
| <li>cherry</li> |
| </ul> |
| */ |
| |
| |
| container.innerHTML = domStr |
# 循环数组嵌套
| |
| const data = { |
| arr: [ |
| { tag: 'li', name: 'lain', age: 16, freiends: ['saber', '樱岛麻衣'] }, |
| { tag: 'li', name: 'saber', age: 17, freiends: ['樱岛麻衣', '稚名真白'] }, |
| { tag: 'li', name: '樱岛麻衣', age: 16, freiends: ['稚名真白', 'lain'] }, |
| { tag: 'li', name: '稚名真白', age: 17, freiends: ['lain', 'saber'] } |
| ] |
| } |
| |
| |
| const templateStr = ` |
| <ul> |
| {{ #arr }} |
| <li> |
| <span>姓名:{{ name }}</span> |
| <span>年龄:{{ age }}</span> |
| <ol> |
| {{ #freiends }} |
| <li>freiends: {{ . }}</li> |
| {{ /freiends }} |
| </ol> |
| </li> |
| {{ /arr }} |
| </ul> |
| ` |
| |
| const domStr = Mustache.render(templateStr, data) |
| |
| |
| container.innerHTML = domStr |
| |
| <ul> |
| <li> |
| <span > 姓名:lain</span> |
| <span > 年龄:16</span> |
| <ol> |
| <li>freiends: saber</li> |
| <li>freiends: 樱岛麻衣 & lt;/li> |
| </ol> |
| </li> |
| <li> |
| <span > 姓名:saber</span> |
| <span > 年龄:17</span> |
| <ol> |
| <li>freiends: 樱岛麻衣 & lt;/li> |
| <li>freiends: 稚名真白 & lt;/li> |
| </ol> |
| </li> |
| <li> |
| <span > 姓名:樱岛麻衣 & lt;/span> |
| <span > 年龄:16</span> |
| <ol> |
| <li>freiends: 稚名真白 & lt;/li> |
| <li>freiends: lain</li> |
| </ol> |
| </li> |
| <li> |
| <span > 姓名:稚名真白 & lt;/span> |
| <span > 年龄:17</span> |
| <ol> |
| <li>freiends: lain</li> |
| <li>freiends: saber</li> |
| </ol> |
| </li> |
| </ul> |
| */ |
# 布尔值 显示隐藏
| |
| const templateStr = ` |
| {{ #m }} |
| <h2>Hello World~</h2> |
| {{ /m }} |
| ` |
| |
| const flag = { |
| m: true, |
| |
| } |
| |
| |
| const domStr = Mustache.render(templateStr, flag) |
| |
| |
| container.innerHTML = domStr |
# template
| |
| <script type="test/template" id="template"> |
| <ul> |
| {{ #arr }} |
| <li> |
| <span>姓名:{{ name }}</span> |
| <span>年龄:{{ age }}</span> |
| <ol> |
| {{ #freiends }} |
| <li>freiends: {{ . }}</li> |
| {{ /freiends }} |
| </ol> |
| </li> |
| {{ /arr }} |
| <ul> |
| </script> |
| |
| <script> |
| |
| const templateStr = document.querySelector('#template').textContent |
| console.log(templateStr); |
| |
| const data = { |
| arr: [ |
| { tag: 'li', name: 'lain', age: 16, freiends: ['saber', '樱岛麻衣'] }, |
| { tag: 'li', name: 'saber', age: 17, freiends: ['樱岛麻衣', '稚名真白'] }, |
| { tag: 'li', name: '樱岛麻衣', age: 16, freiends: ['稚名真白', 'lain'] }, |
| { tag: 'li', name: '稚名真白', age: 17, freiends: ['lain', 'saber'] } |
| ] |
| } |
| |
| const domStr = Mustache.render(templateStr, data) |
| |
| |
| container.innerHTML = domStr |
| </script> |