微信小程序学习笔记(一) 初识

  • Post author:
  • Post category:小程序




基本框架



优缺点

1.优点

①无需下载安装

②触手可及

③用完即走

④跨平台

⑤开放能力

⑥生态体系

⑦用户黏性

2.缺点

①不能推送消息

②没有订阅关系

③没有应用商店



框架



1.逻辑层

处理逻辑业务

JS



2.视图层

渲染页面

描述语言WXML

视图样式WXSS



3.微信小程序框架

=逻辑层+视图层+json配置文件



框架目录



1.框架页面文件

pages目录下

文件类型 是否必填 作用
js 页面逻辑
json 页面配置
wxml 页面结构
wxs 小程序脚本语言
wxss 页面样式表



2.框架全局文件

app.js: 定义全局数据和函数的使用

app.json: 对五个功能进行设置:配置页面路径、窗口表现、标签导航、网络超时、Debug模式

app.wxss: 样式文件

project.config.json: 个性化配置文件



注册

在app.js中

生命周期函数

文件 作用 触发
onLaunch 监听小程序初始化 一旦初始化完成就触发,只触发一次
onShow 监听小程序的显示 再次打开小程序(由后台转入前台时)
onHide 监听小程序的隐藏 有前台转入后台
onError 监听小程序的错误 脚本或API错误时
onPageNotFound 监听页面是否存在 打开的页面不存在时
在js中调用app.js的全局数据:globalData

var AppInstance=getApp()//获得实例
console.log(AppInstance.globalData)
//可以调用全局数据和自定义的全局函数
//但不要调用生命周期函数
//getApp()获取实例后不要私自调用生命周期函数

//不要再onLoad中调用getCurrentPage()
//因为此时page还没有生成



注册页面的使用

在index.js中



1.page()中

属性 描述
data 页面的初始数据(对象)
onLoad 监听页面加载
onReady 监听页面初次渲染完成
onShow 监听页面显示
onHide 监听页面隐藏
onUnload 监听页面卸载
onPullDownRefresh 监听用户下拉动作
onReachBottom 页面上拉触底事件的处理函数
onShareAppMessage 用户单击右上角分享
onPageScroll 页面滚动触发事件的处理函数
onTabItemTap 当时是tab页时,点击tab时触发



2.页面初始化数据-data

①作为页面的第一次渲染

②以json形式由逻辑层传到渲染层

③数据必须是可以转成json的格式:字符串、数字、布尔值、对象、数组

④渲染界面可以通过WXML对数据进行绑定



3.生命周期函数

①onLoad

一个页面只调用一次

可以用wx.navigateTo和wx.redirectTo及标签中的query接收参数

②onShow

每次打开页面调用

③onReady

一个页面只调用一次,对界面的设置要在onReady之后

④onHide

当调用navigateTo或底部tab(切换页面)时调用

⑤onUnload

当调用redirectTo或navigateBack时调用

⑥onPullDownRefresh

监听用户下拉刷新事件,需要在config的windows选项中开启enablePullDownRefresh

当处理完数据刷新后,wx.stopPullDownRefresh可以停止当前页面的下拉刷新

⑦onShareAppMessage

只有定义了此事件的处理函数,右上角菜单才会显示分享按钮,用户点击分享按钮时会调用此函数。此事件需要返回一个对象参数,用于自定义分享内容

//js
Page({
    onShareAppMessage:function(){
     	return{
            title:'...'//标题
            desc:'...'//描述
            .....
            path:'...'//路径
        }
	}
})



4.页面路由管理

是由微信小程序框架管理的,框架以栈的形式管理所有页面

如:

小程序初始化:新页面入栈

打开新页面:入栈

页面重定向:出栈

页面返回:出栈

tab切换:页面全部出栈,只留下新的tab页面



注意:

① navigateTo,redirectTo只能打开非tabBar页面

② switchTab只能打开tabBar页面(即小程序底部tab标签)

③ reLaunch可以打开任意页面

④ 页面底部的tabBar由页面决定,即只要是定义为 tabBar的页面,底部都有tabBar

⑤ 调用页面路由带的参数可以在目标页面的onLoad中获 取



5.自定义函数

除了初始化数据和生命周期函数,Page中还可以定 义一些特殊的函数:事件处理函数,在渲染层的组件中可以加入事件绑定 ,当达到触发事件时,就会执行Page中定义的事件处 理函数

//wxml文件
<view bindtap=“clickMe”>点我</view>

//js文件
Page({
	clickMe:function() {
		console.log(‘view tap’)
	}
})



6.setData设值函数

Page.prototype.setData()设值函数用于将数据从逻辑层发 送到视图层 ,同时改变对应的this.data的值

setData()参数格式: 接受一个对象,以key, value的形式表示将this.data中的key对应的值改变成value

其中key非常灵活,以数据路径的形式给出,如 array[2].message,a.b.c.d ,并且不需要在this.data中预先定义

<!—wxml-->
<view>{{title}}</view>
<button bindtap="changeText">改变正常数据</button>
<view>{{array[0].text}}</view>
<button bindtap="changeItemInArray">改变数据数据</button>
<view>{{object.text}}</view>
<button bindtap="changeItemInObject">改变对象数据</button>
<view>{{newField.text}}</view>
<button bindtap="addNewField">增加新数据</button>
//js
Page({
	data: {
	text: 'init data',
	array:[{text:'init data'}],
	object:{ text:'init data'} 
    },
	changeText:function() {
		//this.data.text='changed data'//错误,不能工作
		this.setData({ text:'changed data'}) },
        changeItemInArray:function() {
        this.setData({ 'array[0].text':'changed data'}) } ,
        changeItemInObject:function() {
        this.setData({ 'object.text':'changed data'}) } ,
        addNewField:function() {
        this.setData({ 'newField.text':'new data'}) 
        }
})

注:

直接修改this.data无效

无法改变页面的状态

还会造成数据不一致

单次设置的数据不能超过1024KB,尽量避免一次 性设置过多的数据



数据绑定

WXML页面的动态数据,来自js文件Page的data

数据绑定就是用双大括号将变量包起来,在WXML中将数据值显示出来



1.组件属性绑定

将data里的数据绑定到微信小程序里

//wxml
<view id="item-{{id}}"></view>

//js
Page({
    data:{
        id:0
    }
})



2.控制属性绑定

用来进行if语句

//wxml
<view wx:if="{{condition}}"></view>

//js
Page({
    data:{
        condition:true
    }
})



3.关键字绑定

常用于组件的一些关键字

像复选框组件一样:checked关键字如果true,则代表复选框选中

<checkbox checked="{{false}}"></checkbox>



4.运算

可以在{

{}}中进行运算

支持:三元运算、数学运算、逻辑判断、字符串运算、数据路径运算

//三元
<view hidden="{{flag?true:false}}">Hidden</view>

//数学
//wxml
<view>{{a+b}}+{{c}}</view>
//js
Page({
    data:{
        a:1,
        b:2, 
        c:3
    }
})

//逻辑
<view wx:if="{{len>5}}"></view>

//字符串
<view>{{"hello"+name}}</view>

//数据路径
//wxml
<view>{{object.key}} {{arr[0]}}</view>
//js
Page({
    data:{
        object:{
            key:'sss'
        },
        arr:['hello']
    }
})



条件渲染



1.判断单个组件

wx:if wx:else wx:elif

<view wx:if="{{len>5}}">1</view>
<view wx:elif="{{len>3}}">2</view>
<view wx:else>3</view>



2.判断多个组件

block wx:if

<block wx:if="{{true}}">
    <view>v1</view>
	<view>v2></view>
</block> 

不是一个组件,它是一个包装元素,不会在页面做任何渲染,只接受控制属性,不要再这个标签上绑定其他属性:data-或bindtap等



列表渲染



1.列表渲染单个组件

wx:for

数组当前项的下表变量名默认为index

数组当前项的变量名默认为item

//wxml
<view wx:for="{{arr}}"> 
    {{index}}:{{item.message}}
</view>

//js
Page({
	data:{
		arr:[{
			message:'第0个元素'
		},{
			message:'第1个元素'
		}]
	}
})

使用wx:for-index和wx:for-item指定当前元素下标变量名和当前元素变量名

<view wx:for="{{arr}}" wx:for-index="idx" wx:for-item="itemname"> 
    {{idx}}:{{itemname.message}}
</view>



2.列表渲染多个组件

block wx:for

<block wx:for="{{[1,2,3]}}">
	<view>{{index}}:</view>
    <view>{{item}}</view>
</block>



3.指定唯一标识符

wx:key

如果列表中项目的位置会动态改变或有新的项目添加到列表中,并且希望列表中的项目保持自己的特征和状态,如:

的输入内容


的选中状态

需用wx:key来指定列表中的唯一标识符


则框架会重新排列,而不是重新创建,提高列表渲染效率


key有两种形式

①字符串:for循环中数组的item表示的属性,是字符串或数值

②保留关键字:*this,代表item本身

<switch wx:for="{{arr}}" wx:key="unique">{{item.id}}</switch>

Page({
	data:{
		arr:[
			{id:5,unique:'u_5'},
			{id:4,unique:'u_4'},
			{id:3,unique:'u_3'},
			{id:2,unique:'u_2'},
			{id:1,unique:'u_1'},	
		]
	}
})


如不提供wx:key,会报warning,如果明确知道该列表是静态或者不必关注其顺序,可忽略



模板

//WXML

//定义模板:name属性
<template name="msgItem">
	<view>
    	<text>{{index}}:{{msg}}</text>
        <text>Time:{{time}}</text>
    </view>
</template>

//使用模板:is属性,再将所需data传入
<template is="msgItem" data="{{item}}" />
//js

Page({
    data:{
        item:{
            index:0,
            msg:'模板',
            time:'2020-1-26'
        }
    }
})



引用

在WXML中引用



1.import

引用模板文件

<import src="msgItem.wxml" />
<template is="msgItem" data=..... />



2.include

引用除模板文件其余

<include src="header.wxml" />

<!--header.wxml-->
<view>头文件</view>



WXS

是小程序的一种脚本语言,结合WXML文件可以构建页面结构

把原来js文件处理的逻辑,直接放在WXML文件中处理



1.使用方式

①将WXS嵌入到WXML文件中,在WXML的标签内来处理相关逻辑

<!--wxml-->

<wxs module="m1">
var msg="hello";
</wxs>

<view>{{m1.msg}}</view>

②以.wxs后缀的文件独立存在,然后在引入到WXML文件中

.../tools.wxs

<!--wxml-->
<wxs src=".../tools.wxs" module="tools" />
....



2.模块化

①WXS是以模块化的形式存在的,是一个单独的模块

②在一个模块中定义的变量和函数,默认私有,其他模块不可见

③想要对外暴露其变量或函数,需用module.exports

..../comm.wxs
var foo="";
var bar="";
module.exports={
	foo:foo,
	bar:bar
}



3.变量使用

①wxs中变量均为值的引用

②若只声明变量而不赋值,则默认为undefined



4.适用语句

for

for(var i=0;i<10;i++)
{
    if(i==1)continue;
    else {console.log(i);}
}

switch

var s=60;
switch(s){
case "60":
    console.log("优");
    break;
 ...
}

while

while()
{

}

do{

}while();

if

var s=60;
if(s>70){
console.log("优");
}else if....



版权声明:本文为qq_45665007原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。