微信小程序开发

如果小程序是一个多 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 切换时显示的对应页面。

属性类型必填默认值描述最低版本
colorHexColor是tab 上的文字默认颜色,仅支持十六进制颜色
selectedColorHexColor是tab 上的文字选中时的颜色,仅支持十六进制颜色
backgroundColorHexColor是tab 的背景色,仅支持十六进制颜色
borderStylestring否blacktabbar 上边框的颜色, 仅支持 black / white
listArray是tab 的列表,详见 list 属性说明,最少 2 个、最多 5 个 tab
positionstring否bottomtabBar 的位置,仅支持 bottom / top
customboolean否false自定义 tabBar,见详情

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

属性类型必填说明
pagePathstring是页面路径,必须在 pages 中先定义
textstring是tab 上按钮文字
iconPathstring否图片路径,icon 大小限制为 40kb,建议尺寸为 81px * 81px,不支持网络图片。 当 position 为 top 时,不显示 icon。
selectedIconPathstring否选中时的图片路径,icon 大小限制为 40kb,建议尺寸为 81px * 81px,不支持网络图片。 当 position 为 top 时,不显示 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.navigateTo 或 wx.navigateToMiniProgram 的功能保留当前页面,跳转到应用内的某个页面。但是不能跳到 tabbar 页面。使用 wx.navigateBack 可以返回到原页面。小程序中页面栈最多十层。
redirect对应 wx.redirectTo 的功能关闭当前页面,跳转到应用内的某个页面。但是不允许跳转到 tabbar 页面。
switchTab对应 wx.switchTab 的功能跳转到 tabBar 页面,并关闭其他所有非 tabBar 页面
reLaunch对应 wx.reLaunch 的功能1.1.0关闭所有页面,打开到应用内的某个页面
navigateBack对应 wx.navigateBack 或 wx.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>

如果希望改变index和item变量名

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:elif 和 wx: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'}
  }
})

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

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

发送网络请求

评论

评论加载中……

登录