_大叔_
2020-04-14 20:43·字数:489·阅读:196
关于 template 的基本使用我这里就不说了,大家可看文档,传送门。
接下来要说的是关于 template 在使用的时候出现的一些问题。
一、template 的含义
template 就是模板的意思,只要我们刻画出来后不管在任何地方使用,他都是一个样子,但是在微信小程序里不完全是,微信小程序在 template 上有 data 属性,意思就是我们可以传数据进去,不管你是传样式,还是改变模板的内容都是可以的。
二、template 使用 wxs语法
我以为只有我一个人碰到了,但并不是,我们先看看类似碰到的人怎么说:
然而最屌的还是官方:
我也遇到了类似的问题在 template 使用 wxs 导致调用了多次(不止两次),我可不相信这是一个正常现象,执行多遍不浪费性能嘛?(真想不明白微信为什么不直接使用VUE算了,你自己封装也得让人用着没问题才是,装什么B)
emmmm...没办法,问题还是要解决的,自己在这瞎折腾也不可能一时半会就解决的,解决方式要么欺骗自己(调一次执行6遍,调两次执行12遍),要么不要封装 template,要么就是数据在得到的时候先处理掉,在传入 template,要么就是让后端帮忙处理掉。
三、template 中引用图片的路径问题
其实很简单,template中,如果有多处引用了 同一个模板,且模板在不同层级的目录中引用,模板中的图片会 500错误,简单意思就是找不到的呢。建议把图片放到公网环境。
一、定义模板1、新建一个template文件夹用来管理项目中所有的模板;
2、新建一个courseList.wxml文件来定义模板;
3、使用name属性,作为模板的名字。然后在内定义代码片段。
注意:
a.可以看到一个.wxml文件中可以定义多个模板,只需要通过name来区分;
b.模板中的数据都是展开之后的属性。
<template name="courseLeft">
<navigator url="../play/play?courseUuid={{courseUuid}}&isCompany={{isCompany}}">
<view class="item mr26">
<image src="{{imagePath}}" mode="aspectFill"></image>
<view class="course-title">
<text class="title">{{courseName}}</text>
<text class="author">- {{teacherName}}</text>
</view>
<view class="course-info clearfix">
<view class="fl"><text class="play">{{playCount}}</text></view>
<view class="fr"><text class="grade">{{score}}</text></view>
</view>
<view wx:if="{{studyProgress}}" class="tip-completed">{{studyProgress}}</view>
</view>
</navigator></template><template name="courseRight">
<navigator url="../play/play?courseUuid={{courseUuid}}&isCompany={{isCompany}}">
<view class="item">
<image src="{{imagePath}}" mode="aspectFill"></image>
<view class="course-title">
<text class="title">{{courseName}}</text>
<text class="author">- {{teacherName}}</text>
</view>
<view class="course-info clearfix">
<text class="play fl">{{playCount}}</text>
<text class="grade fr">{{score}}</text>
</view>
<view wx:if="{{studyProgress}}" class="tip-completed">{{studyProgress}}</view>
</view>
</navigator></template>
二、使用模板
1、使用 is 属性,声明需要的使用的模板
<import src="../../templates/courseList.wxml"/>
2、将模板所需要的 data 传入,一般我们都会使用列表渲染。
<block wx:for="{{courseList}}">
<template is="{{index%2 === 0 ? 'courseLeft' : 'courseRight'}}" data="{{...item}}"></template></block>
注意:
a.可以通过表达式来确定使用哪个模板is="{{index%2 === 0 ? 'courseLeft' : 'courseRight'}}"
或者通过wx:if来确定。index是数组当前项的下标。
<template wx:if="{{index%2 === 0}}" is="courseLeft" data="{{...item}}"></template>
<template wx:else is="courseRight" data="{{...item}}"></template>
b. data 是要模板渲染的数据,data="{{...item}}" 写法是ES6的写法,item是wx:for当前项,... 是展开运算符,在模板中不需要再{{item.courseName}} 而是直接{{courseName}} 。
三、模板样式
1、在新建模板的时候同时新建一个courseList.wxss 的文件,与CSS同样的写法控制样式。
2、在需要使用模板的页面 .wxss文件中import进来;或者直接在app.wxss中引入,这样只需要一次引入,其他文件就不用引入了。
@import url("../template/courseList.wxss")
小程序的template是一种模板,不能用于直接显示的代码。它正常情况下不显示,需加载使用。 <block>并不是一个组件,它仅仅是一个包装标签元素,不会在页面中做任何渲染,只接受控制属性(如wx:if、wx:for)。欢迎分享,转载请注明来源:内存溢出
评论列表(0条)