第四节:高性能 JavaScript 模板引擎 之 art-template

官网地址:http://aui.github.io/art-template/docs/syntax.html

艺术模板 - 高性能 JavaScript 模板引擎。

<script src="https://cdn.bootcdn.net/ajax/libs/art-template/4.13.2/lib/template-web.js"></script>

使用art模板时,需要使用id值进行绑定。

参数1:id值。参数2:对象数据。

template('id值', {数据});
<div class="box"> </div>

<script type="text/html" id="box">
	<h1>
    	{{uName}} - {{age}}
    </h1>
</script>

<script>
    // 设置当前 id 为 box 的数据
	var html = template('box', {uName: '张三', age: 17});
    // 打印在内容区
    document.querySelector('.box').innerHTML = html;
</script>

<!--结果:张三 - 17 -->

art-template 循环语法

each 遍历对象数组

<div class="box"></div>

<!-- 遍历 data 对象中的 list,index是下标,value是每一项的值 -->
<script type="text/html" id="list">
	{{each list}}
		<h2>{{$index}} - {{$value}}</h2>
	{{/each}}
</script>

<script>
    // 准备的数据
    var data = {
        list: ['张三', '李四'],
    }
    // 遍历 data 对象
    var html = template('list', data);
    document.querySelector('.box').innerHTML = html;
</script>

<!--结果:
	0 - 张三
	1 - 李四
-->

注意事项

1. 固定语法: type,设置id值
<script type="text/html" id="list"></script>

2. 语法
template('id值', 数据);

3. 遍历语法
  是数组的话,index是数组中的下标,value是数组中的每一项
  是对象的话,index对象的每一项,value可以点出属性
{{each}}
	{{$iindex}} {{$value}}
{{/each}}

art 渲染列表

渲染列表(接口有问题)

<tbody></tbody>

<script type="text/html" id="item">
	{{each}}
		<tr>
			<td>欢迎大家</td>
			<td>
				<button>评论人:{{$value.username}}</button>
  				<button>评论时间:{{$.value.time}}</button>
    		</td>
    	</tr>
	{{/each}}
</script>

<script>
    $.ajax({
        type: 'post',
        url: 'http://www/liulongbin.top:3006/api/addcmt',
        data: {
            username: 'uName',
            content: 'content',
        },
        succrss: function (res) {
            renderList();
        }
    });

    function renderList () {
        $.ajax({
            type: 'get',
            url: 'http://www/liulongbin.top:3006/api/cmtlist',
            success: function (res) {
                if (res.status == 200) {
                    var html = template('item', res.data);
                    document.querySelector('tbody').innerHTML = html;
                }
            }
        })
    }
</script>

案例:二进制文件上传

需求:上传文件进度条。

bootstrap官网:https://v3.bootcss.com

<link href="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/5.0.0-beta3/css/bootstrap.min.css" rel="stylesheet">
<input type="file" id="file">
<div class="progress">
    <div class="progress-bar" role="progressbar" aria-valuenow="60" aria-valuemin="0" aria-valuemax="100"
         style="width: 60%;">
        60%
    </div>
</div>
<div class="box"></div>

<script>
    // 1. 获取页面元素
    var file = document.getElementById('file');
    var bar = document.querySelector('.progress-bar');
    var box = document.querySelector('.box');
    // 2.添加change事件
    file.addEventListener('change', function () {
        // 原生js发送ajax请求
        var formData = new FormData();
        formData.append('attrName', this.files[0]);

        var xhr = new XMLHttpRequest();
        xhr.upload.onprogress = function (ev) {
            // 进度条 = 已上传 / 总量 * 100%
            var r = (ev.loaded / ev.total) * 100 + '%';
            // 进度条百分比
            bar.style.width = r;
            bar.innerHTML = r;
        }

        xhr.open('post', 'localhost:3000/upload');
        xhr.send(formData);

        xhr.onload = function () {
            
            if (xhr.status == 200) {
                var path = JSON.parse(xhr.responseText).path;
                var img = document.createElement('img');
                img.src = path;
                img.onload = function () {
                    box.appendChild(img);
                }
            }
            
        }
    })
</script>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

孤安先生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值