一、要求严格闭合
二、大小写敏感css
双括号html
双括号{{}}
,相似于vue的{{}}
用法,能够进行一些简单的逻辑运算,数据绑定于对应js文件的data中vue
<!--属性值的绑定,必须使用双括号--> <text data-test="{{test}}"> hello world</text>
条件逻辑数据库
<view wx:if="{{length > 5}}"> 1 </view> <view wx:elif="{{length > 2}}"> 2 </view> <view wx:else> 3 </view> <!--由于 wx:if 是一个控制属性,须要将它添加到一个标签上。若是要一次性判断多个组件标签,可使用一个 标签将多个组件包装 起来,并在上边使用 wx:if 控制属性--> <block wx:if="{{true}}"> <view> view1 </view> <view> view2 </view> </block>
列表渲染npm
在组件上使用 wx:for 控制属性绑定一个数组,便可使用数组中各项的数据重复渲染该组件。默认数组的当前项的下标变量名默认为 index,数组当前项的变量名默认为 itemjson
<!-- array 是一个数组 --> <view wx:for="{{array}}"> {{index}}: {{item.message}} </view> <!-- 对应的脚本文件 Page({ data: { array: [{ message: 'foo', }, { message: 'bar' }] } }) --> <!--使用 wx:for-item 指定数组当前元素的变量名,使用 wx:for-index 指定数组当前下标的变量名:--> <view wx:for="{{array}}" wx:for-index="idx" wx:for-item="itemName"> {{idx}}: {{itemName.message}} </view> <!-- 若是列表中项目的位置会动态改变或者有新的项目添加到列表中,使用 wx:key 来指定列表中项目的惟一的标识符。 字符串,表明在 for 循环的 array 中 item 的某个 property,该 property 的值须要是列表中惟一的字符串或数字,且不能动态改变。 保留关键字 this 表明在 for 循环中的 item 自己,这种表示须要 item 自己是一个惟一的字符串或者数字--> <!--wx:key 的值以两种形式提供:--> <switch wx:for="{{objectArray}}" wx:key="unique" > {{item.id}} </switch> <switch wx:for="{{numberArray}}" wx:key="*this" > {{item}} </switch>
模板
WXML提供模板(template),能够在模板中定义代码片断,而后在不一样的地方调用。使用 name 属性,做为模板的名字。而后在 <template/> 内定义代码片断小程序
<!-- item: { index: 0, msg: 'this is a template', time: '2016-06-18' }--> <template name="msgItem"> <view> <text> {{index}}: {{msg}} </text> <text> Time: {{time}} </text> </view> </template> <template is="msgItem" data="{{...item}}"/>
引用
WXML 提供两种文件引用方式import和include。
import 能够在该文件中使用目标文件定义的 template后端
<!--在 item.wxml 中定义了一个叫 item的 template,在 index.wxml 中引用了 item.wxml,就可使用 item模板--> <import src="item.wxml"/> <template is="item" data="{{text: 'forbar'}}"/>
须要注意的是 import 有做用域的概念,即只会 import 目标文件中定义的 template,而不会 import 目标文件中 import 的 template,简言之就是 import 不具备递归的特性微信小程序
<!--include 能够将目标文件中除了 <template/> <wxs/> 外的整个代码引入,至关因而拷贝到 include 位置--> <!-- index.wxml --> <include src="header.wxml"/> <view> body </view> <include src="footer.wxml"/>
WXSS与Web开发中的CSS相似数组
分别为页面样式、其余样式、公用样式
公用样式:会被注入到小程序的每一个页面
页面样式:与app.json注册过的页面同名且位置同级的WXSS文件
其它样式:其它样式能够被项目公共样式和页面样式引用
WXSS引用
<!--小程序中的样式引用--> @import './test_0.wxss'
内联样式
WXSS内联样式与Web开发一致
小程序支持动态更新内联样式:
<!--可动态变化的内联样式--> <!-- { eleColor: 'red', eleFontsize: '48rpx' }--> <view style="color: {{eleColor}}; font-size: {{eleFontsize}}"></view>
模块化
在须要使用这些模块的文件中,使用 require(path) 将公共代码引入
// moduleA.js module.exports = function( value ){ return value * 2; } // 在B.js中引用模块A var multiplyBy2 = require('./moduleA') var result = multiplyBy2(4)
做用域
当须要使用全局变量的时,经过使用全局函数 getApp() 获取全局的实例,并设置相关属性值
// a.js // 获取全局变量 var global = getApp() global.globalValue = 'globalValue' // b.js // 访问全局变量 var global = getApp() console.log(global.globalValue) // 输出 globalValue
模拟后端的函数操做,在每一个新建的云函数中,先npm install一下wx-server-sdk(每一个都要),而后上传你的云函数,就能够在云平台看到相关函数,进行测试等等
云函数的调用:
wx.cloud.callFunction({ name: 'resp', data: { data: '测试数据' }, success: res => { wx.showToast({ title: '发布成功', }) this.setData({ name: JSON.stringify(res.result.data.total) }) }, fail: err => { wx.showToast({ icon: 'none', title: '调用失败', }) console.error('[云函数] [sum] 调用失败:', err) } })
云函数中操做数据库(官方文档写的很迷),这边总结一下:
// 云函数入口文件 const cloud = require('wx-server-sdk') cloud.init() const db = cloud.database() // 云函数入口函数 exports.main = async (event, context) => { // const wxContext = cloud.getWXContext() const add = await db.collection('counters').add({ data: { count: 1, data: event.data } }) const count = await db.collection('counters').count() return { data: count } }
关于Loading的问题
一些点击以后上传数据的交互,好比Button的loading方法,在微信小程序中只是添加一个按钮样式???为了防止用户极快速度触发两次tap回调,能够一个hasClick的“锁”,在开始请求前检查是否已经发起过请求,若是没有才发起此次请求,等到请求返回以后再把锁的状态恢复回去
var hasClick = false if (hasClick) { return } hasClick = true wx.showLoading() //在返回完成记得恢复状态 complete: data => { hasClick = false }
这边的在线地址须要真正的url地址而不是复制的连接地址哈,在播放歌曲时找到真正的资源地址