微信小程序开发

微信小程序开发-基础

2019-04-23  本文已影响0人  jshan

wxml

wxml(WeiXin Markup Language)作为小程序前端的结构语言,和html类似,但是有以下几项需要注意:

赋值

js文件里 Page 实例中修改data的时候,方法如下:

this.data.nameArray = [];
this.setData({
    nameArray: this.data.nameArray
})

之所以要使用 setData 方法,是为了达到将数据从逻辑层传递到渲染层,在对比JS对象的前后差异,把差异应用到Dom树上,渲染出新的UI界面。
setData 方法是Page实例的原型函数,该操作是一个异步操作,第二个参数是一个callback回调,是这次 setData 对界面渲染完成后触发的回调函数。

逻辑语法

{{}} 该括号中,除了可以直接填写变量名之后,还可以使用三元运算符,或者是简单的数字运算,或者是字符串的拼接等操作。

条件逻辑

wx:if / wx:elif / wx:else 组成了条件判断的使用情况,具体例子如下:

<block wx:if="{{total > 10}}">
    <view> view1 </view>
    <view> view2 </view>
</block>
<view wx:elif="{{total > 5}}">
    view 3
</view>
<view wx:else>
    view 4 
</view>

列表渲染

wx:for / wx:for-index / wx:for-item / wx:key 组成了列表渲染的组件,默认数组的当前项的下标变量名默认为 index ,数组当前项的变量名默认为 item,并且 wx:for-index 可以重命名当前循环的下标名(index),wx:for-item 可以重命名当前循环的元素(item),具体例子如下:

<view wx:for="{{names}}" wx:for-index="indexNewName" wx:for-item="itemNewName">
    {{indexNewName}}: {{itemNewName}}
</view>

如果列表数据有新增或减少,或者是列表里元素的数据有变化时,为了达到动态渲染的效果,这时候可以使用 wx:key 来标识每一个渲染。wx:key 有两种形式提供:

<!-- 字符串: 列表里item中的一个唯一属性 -->
<switch wx:for="{{objectArray}}" wx:key="uniqueProperty" > {{item.uniqueProperty}}: {{item.otherProperty}} </switch>

<!-- this: 列表里item是一个唯一的字符串或者是数字 -->
<switch wx:for="{{numberArray}}" wx:key="*this" > {{item}} </switch>

模版

在wxml中可以使用 template 来定义模版,并用 name 属性来表示模版名字,在真正需要使用并渲染该模版的时候,就用 is 来表示使用的是哪一个模版,并且使用 data 来表示传入到该模版的渲染数据,具体例子如下:

<!-- 模版定义内容 -->
<template name="tmpl_1">
    <view> {{id}}: {{name}}</view>
</template>

<!-- 实例化渲染使用模版, item = {id: 1, name: 'js'} -->
<template is="tmpl_1" data="{{...item}}"/>

引用

wxml提供了两种引用方法: import / include。两种方式使用的场景不同

<!-- 使用 import -->
<import src="tmpl.wxml"/>

<!-- 使用 include -->
<include src="header.wxml"/>

共同属性

共同属性指的是: 所有wxml标签都支持属性。包括: id / class / style / hidden(Boolean) / data-* / bind* / catch*.

wxss

wxss(WeiXin Style Sheets),小程序的样式语言。
包括三种样式:

其他样式的引用方法如下两种:

@import url('../../otherss/common.wxss')
@import '../../otherss/bar.wxss'

选择器样式优先级

!important > sytle="" > #id > .class > element
微信提供了官方样式库 WeUI.wxss

js

小程序中的js由三部分组成: ECMAScript + 小程序框架 + 小程序API

小程序可以将任何一个js文件作为一个模块,通过 modules.exports 或者 exports 对外暴露接口。
例如如下代码:

// moduleA.js
module.exports = function (value) {
    console.log(value);
}

// test.js
var printfunc = require('./moduleA');
printfunc('Hello world.')

小程序中js的执行顺序是: 先执行根目录下 app.js 中的内容,如果该文件中有 require 引入其他的js文件,那么也要根据引入的顺序来加载执行;然后按照 app.json 中定义的 pages 的顺序,逐一执行。

小程序中js变量的作用域,是只在本文件中有效的。不同的文件中可以声明和相同的变量和函数,不会互相影响。

小程序中其他js文件如果想要使用全局变量 app.jsApp 实例里定义的变量,可以在文件中使用 var globalData = getApp(); 来获取全局参数。

小程序的每个page页面里的逻辑层

每个页面的逻辑层都是一个 Page 实例,该实例包括如下内容:

Page({
    // 内容
});
  1. 页面的初始数据: data: {}
  2. 生命周期函数 - 监听页面加载: onLoad: function (options) {}
  3. 生命周期函数 - 监听页面显示: onShow: function () {}
  4. 生命周期函数 - 监听页面初次渲染完成: onReady: function () {}
  5. 生命周期函数 - 监听页面隐藏: onHide: function () {}
  6. 生命周期函数 - 监听页面卸载: onUnload: functioin () {}
  7. 页面相关事件处理函数 - 监听用户下拉动作: onPullDownRefresh: function () {}
  8. 页面上拉触底事件的处理函数: onReachBottom: function () {},可以作为分页请求的入口
  9. 用户点击右上角分享: onShareAppMessage: function () {}
  10. 用户滚动滚动条函数: onPageScroll: function () {}

初次进入到页面,会触发 onLoad / onShow / onReady 事件;
如果触发了右上角的分享功能,那么页面会触发 onShareAppMessageonHide 事件,等待分享对话框关闭之后,会触发 onShow 事件;
下拉刷新页面的时候,会触发 onPullDownRefresh 事件;
离开该页面会触发 onUnload 事件

注意: Page实例中的data属性里的数据value不要设为 undefined,不然会引起意想不到的bug.
onShareAppMessage 中的返回值里可以设置分享的一些属性,比如: title / path 等,这样用户在通过该分享连接进来的时候,就会携带这些参数进来。

页面路由

注意: wx.navigateTowx.redirectTo 只能打开非tabBar页面,而 wx.switchTab 只能打开tabBar页面。

API

小程序提供的API按照功能分为: 网络、媒体、文件、数据缓存、位置、设备、界面和界面节点信息。API的调用一般有如下约定:

事件

在小程序里,事件指的是:“用户在渲染层的行为反馈”以及“组件的部分状态反馈”抽象成渲染层传递给逻辑层的事件。

事件绑定和冒泡捕获

事件绑定的写法和组件属性一致,以key="value"的形式,其中:

  1. key以bind或者catch开头,然后跟上事件的类型,如:bindtap/catchtouchstart。自基本库1.5.0起,bind和catch后可以紧跟冒号,其含义不变,如: bind:tap/catch:touchstart。同时bind和catch前面还可以加上 capture- 来表示事件的捕获阶段,没有的话表示事件的冒泡阶段。
  2. value是一个字符串,需要在对应的页面Page构造器中定义同名的函数,否则触发事件时,在控制台有报错信息。

bind事件绑定不会组织冒泡事件向上冒泡,catch事件绑定可以阻止冒泡事件向上冒泡。capture-catch 将中断捕获阶段并取消冒泡阶段。

其他组件的自定义事件,如无特别说明,都是非冒泡事件,如 <form/> 的submit事件,<input/>的input事件,<scroll-view/>的scroll事件

补充:说明一下事件冒泡和捕获。
"DOM2级事件"规定的事件流包含三个阶段:事件捕获、处于目标阶段和事件冒泡阶段。首先发生的是事件捕获,然后是实际的目标接收到事件,最后阶段是冒泡阶段。

兼容

通过API wx.getSystemInfoSync() 可以获取到系统和小程序基础库版本信息 SDKVersion,该参数在开发环境的工程配置文件 project.config.json 中的配置项 libVersion

上一篇 下一篇

猜你喜欢

热点阅读