微信小程序开发

如果小程序是一个多 tab 应用(客户端窗口的底部或顶部有 tab 栏可以切换页面),可以通过 tabBar …

#小程序#微信

快速上手

小程序常用组件

html中有标签
a p div span
小程序没有,小程序自己封装过的叫组件
https://developers.weixin.qq.com/miniprogram/dev/component/

text 	-> span	不换行放文字
view	-> div	独占一行
image	放置图片
icon	小图标

tabBar设置

如果小程序是一个多 tab 应用(客户端窗口的底部或顶部有 tab 栏可以切换页面),可以通过 tabBar 配置项指定 tab 栏的表现,以及 tab 切换时显示的对应页面。

属性类型必填默认值描述最低版本
colorHexColortab 上的文字默认颜色,仅支持十六进制颜色
selectedColorHexColortab 上的文字选中时的颜色,仅支持十六进制颜色
backgroundColorHexColortab 的背景色,仅支持十六进制颜色
borderStylestringblacktabbar 上边框的颜色, 仅支持 black / white
listArraytab 的列表,详见 list 属性说明,最少 2 个、最多 5 个 tab
positionstringbottomtabBar 的位置,仅支持 bottom / top
custombooleanfalse自定义 tabBar,见详情

其中 list 接受一个数组,只能配置最少 2 个、最多 5 个 tab。tab 按数组的顺序排序,每个项都是一个对象,其属性值如下:

属性类型必填说明
pagePathstring页面路径,必须在 pages 中先定义
textstringtab 上按钮文字
iconPathstring图片路径,icon 大小限制为 40kb,建议尺寸为 81px * 81px,不支持网络图片。 positiontop 时,不显示 icon。
selectedIconPathstring选中时的图片路径,icon 大小限制为 40kb,建议尺寸为 81px * 81px,不支持网络图片。 positiontop 时,不显示 icon。

image-20250908142714494

在顶部或在底部的tab页(一般在底部)

image-20250908142035432

如何设置?

1、在app.json中配置

json
  "tabBar":{
    "color": "#00b26a",
    "selectedColor":"#ffca28",
    "list":[
      {
        "pagePath":"pages/index/index",
        "text":"主页"
      },
      {
        "pagePath": "pages/abouts/abouts",
        "text": "关于"
      }
    ]
  }

小程序核心

尺寸单位和样式

之前写的是px
<view style="height: 300px;"></view>
在小程序中使用rpx来表示
<view style="height: 300rpx;"></view>
小程序中,手机屏幕大小可能不一样,使用px像素会有问题,小程序使用的宽度就是750px
无论在什么手机上都会等比例缩放

样式(全局样式与局部样式)

在xx.wxss里面写css样式
app.wxss里面写的样式会在整个项目中生效

首页案例

buttom组件使用
swiper+swiper-item
首页提示板块
flex布局
通知布局
底部布局

小程序引入矢量图

事件绑定

index.wxml

html
<button type="primary" plain size="mini" bind:tap="handleClick" data-name="zhangsan" mark:age="18">你好</button>

index.js

js
Page({
  handleClick(event){
    console.log(event.mark.age)
    console.log(event.target.dataset.name)
  },
})

页面跳转

声明式导航

html
最基本的
<navigator url="/pages/abouts/abouts">
  <button plain type="primary">跳转路由</button>
</navigator>
更多跳转(opentype属性)
<navigator url="/pages/abouts/abouts" open-type="switchTab">
  <button plain type="primary">跳转路由</button>
</navigator>
跳转携带参数
<navigator url="/pages/abouts/abouts?name=zhangsan&age=18" open-type="switchTab">
  <button plain type="primary">跳转路由</button>
</navigator>
Page({
  // 生命周期函数,检测页面变化
  onLoad(optins){
    console.log(this.options.name);
  }
}

open-type

合法值说明最低版本说明
navigate(默认)对应 wx.navigateTowx.navigateToMiniProgram 的功能保留当前页面,跳转到应用内的某个页面。但是不能跳到 tabbar 页面。使用 wx.navigateBack 可以返回到原页面。小程序中页面栈最多十层。
redirect对应 wx.redirectTo 的功能关闭当前页面,跳转到应用内的某个页面。但是不允许跳转到 tabbar 页面。
switchTab对应 wx.switchTab 的功能跳转到 tabBar 页面,并关闭其他所有非 tabBar 页面
reLaunch对应 wx.reLaunch 的功能1.1.0关闭所有页面,打开到应用内的某个页面
navigateBack对应 wx.navigateBackwx.navigateBackMiniProgram (基础库 2.24.4 版本支持)的功能1.1.0关闭当前页面,返回上一页面或多级页面。可通过 getCurrentPages 获取当前的页面栈,决定需要返回几层。
exit退出小程序,target="miniProgram"时生效2.1.0

编程式跳转

js
Page({
  handleClick(event){
    wx.navigateTo({
      url: 'url',
    })
  },
})

wxml语法

模板语法

在xx.js中定义变量

json
data: {
    motto: 'Hello World',
    userInfo: {
      avatarUrl: defaultAvatarUrl,
      nickName: '',
    },
    hasUserInfo: false,
    canIUseGetUserProfile: wx.canIUse('getUserProfile'),
    canIUseNicknameComp: wx.canIUse('input.type.nickname'),
  },

使用{{变量名}}使用模板

{{motto}}
里面不能写语句,方法调用
可以使用:变量 三元运算 数学表达式 逻辑判断
html
<button type="primary" plain size="mini" bind:tap="handleClick">你好</button>

{{age}}
js
  handleClick(event){
    this.data.age+=1
    console.log(this.data.age);
  },

默认的数据不是响应式的,使用下面

js
handleClick(event){
  // 要让页面改变,使用微信提供的
  this.setData({
    age:++this.data.age
  })
  console.log(this.data.age);
},
  
//修改对象类型:
this.setData({
  "userInfo.age":90
})

循环语法:

html
<view wx:for="names" wx:key="index">{{item}}</view>

修改数组

js
//1、先追加,在setData
this.setData({
  "names":newNames
})
//2、修改
this.setData({
  "names[0]":"张三"
})
//3、删除
//先把数组修改好,再使用set设置

列表渲染

html
<view wx:for="names" wx:key="index">{{item}}</view>

如果希望改变indexitem变量名

html
 <view wx:for="names" wx:key="index" wx:for-index="myIndex" wx:for-item="myItem">{{item}}</view>

条件渲染

wx:if
wx-elif
ex-else

条件渲染

在框架中,使用 wx:if="" 来判断是否需要渲染该代码块:

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

也可以用 wx:elifwx:else 来添加一个 else 块:

html
<view wx:if="{{length > 5}}"> 1 </view>
<view wx:elif="{{length > 2}}"

双向绑定

html
使用module:value="{{value}}"

name:<input type="text" model:value="{{name}}"/>
    {{name}}

WXML

WXML(WeiXin Markup Language)是框架设计的一套标签语言,结合基础组件事件系统,可以构建出页面的结构。

用以下一些简单的例子来看看 WXML 具有什么能力:

数据绑定

html
<!--wxml-->
<view> {{message}} </view>
// page.js
Page({
  data: {
    message: 'Hello MINA!'
  }
})

内容

html
<view> {{ message }} </view>
Page({
  data: {
    message: 'Hello MINA!'
  }
})

组件属性(需要在双引号之内)

html
<view id="item-{{id}}"> </view>
Page({
  data: {
    id: 0
  }
})

控制属性(需要在双引号之内)

html
<view wx:if="{{condition}}"> </view>
Page({
  data: {
    condition: true
  }
})

关键字(需要在双引号之内)

true:boolean 类型的 true,代表真值。

false: boolean 类型的 false,代表假值。

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

特别注意:不要直接写 checked="false",其计算结果是一个字符串,转成 boolean 类型后代表真值。

列表渲染

html
<!--wxml-->
<view wx:for="{{array}}"> {{item}} </view>
// page.js
Page({
  data: {
    array: [1, 2, 3, 4, 5]
  }
})

条件渲染

html
<!--wxml-->
<view wx:if="{{view == 'WEBVIEW'}}"> WEBVIEW </view>
<view wx:elif="{{view == 'APP'}}"> APP </view>
<view wx:else="{{view == 'MINA'}}"> MINA </view>
// page.js
Page({
  data: {
    view: 'MINA'
  }
})
可以使用hidden
<view hidden="{{view == 'MINA'}}"> MINA </view>

模板

html
<!--wxml-->
<template name="staffName">
  <view>
    FirstName: {{firstName}}, LastName: {{lastName}}
  </view>
</template>

<template is="staffName" data="{{...staffA}}"></template>
<template is="staffName" data="{{...staffB}}"></template>
<template is="staffName" data="{{...staffC}}"></template>
// page.js
Page({
  data: {
    staffA: {firstName: 'Hulk', lastName: 'Hu'},
    staffB: {firstName: 'Shang', lastName: 'You'},
    staffC: {firstName: 'Gideon', lastName: 'Lin'}
  }
})

具体的能力以及使用方式在以下章节查看:

数据绑定列表渲染条件渲染模板引用

发送网络请求

评论

评论加载中……