微信小程序的基本操作

2023-11-11

1. 搭建编辑环境

第一步:注册账号,安装微信小程序开发者工具

第二步:新建项目,不使用云服务,选择JavaScript语言

2. 认识小程序项目的基本组成结构

pages:用来存放小程序所有的页面

utils:用来存放工具性质的模块(例如:格式化时间的自定义模块)

app.js: 小程序项目的入口文件

app.json: 小程序项目的全局配置文件

app.wxss: 小程序项目的全局样式文件

3. 小程序文件

页面中json文件

.json: 当前页面的配置文件,配置窗口的外观,表现等 会覆盖app.json中的配置

app.json 内容

pages: 用来记录当前小程序所有页面的路径

window: 全局定义小程序所有页面的背景色,文字颜色

style:全局定义小程序组件所使用的样式版本

sitemaplocation: 用来指明sitemap.json 的位置

project.config.json

是项目配置文件,用来记录对微信开发者工具所做的个性化配置

4. 认识小程序页面

新建小程序页面:app.json中加入路径

修改小程序首页:修改app.json中pages的存放路径

wxml和html区别

1. 标签名称不同

  • div,span,img,a
  • view,text,image,navigator

2. 属性节点不同

  • a-href
  • navigator-url

3. 提供了类似vue的模板语法

  • 数据绑定
  • 列表渲染
  • 条件渲染

什么是wxss

类似css

  • 新增了rpx尺寸单位
  • 提供了全局的样式和局部样式
  • 仅仅支持部分css选择器

5. 小程序的宿主环境

通信的主体

渲染层 wxml和wxss工作在渲染层

逻辑层 js脚本工作在逻辑层

通信模型

渲染层和逻辑层的通信由微信客户端进行转发

同时客户端负责与服务器之间的数据请求和数据响应

运行机制

小程序启动

  1. 下载代码包
  2. 解析app.json全局配置文件
  3. 执行app.js入口文件,调用app()创建小程序实例
  4. 渲染小程序首页
  5. 启动完成

页面渲染

  1. 加载页面的.json配置文件
  2. 加载.wxml和.wxss样式
  3. 执行页面的.js文件,调用page()创建页面

1. 常用的视图容器组件

  • view: 类似div
  • scroll-view: 可滚动的视图效果
  • swiper: 轮播图外面盒子 swiper-item:每个轮播图项目

2. view组件

flex布局

效果

wxml

wxss

3.flex布局

容器的6个属性

  1. flex-direction: 设置主轴方向
  • row:从左到右
  • row-reverse: 从右到左
  • column:从上到下
  • column-reverse:从下到上
  1. flex-wrap: 设置换行方式
  • nowrap: 不换行
  • wrap:正常换行
  • wrap-reverse: 换行,第一行在下方
  1. flex-flow: 综合前面两个属性
  2. justify-content: 决定x轴排列方式
  • flex-start: 顶着左边开始排列
  • flex-end: 顶着右边开始排
  • center: 居中
  • space-between:顶着左右两边,间距一致
  • space-around:与左右两边有间距,所有间距一致
  1. align-items: 决定在y轴上的排列方式
  1. align-content属性

4. 滚动组件

  1. 采用scroll-view实现
  2. 在wxml里面设置滚动的轴,scoll-y
  3. 给scoll-view设定高度

5. swiper和swiper-item组件

wxml

<swiper class="container2">
<swiper-item><view class="item">ok1</view></swiper-item>
<swiper-item><view class="item">ok2</view></swiper-item>
<swiper-item><view class="item">ok3</view></swiper-item>
</swiper>
复制代码

wxss

.container2{
  height: 150px;
  width: 100%;
  text-align: center;
  line-height: 150px;
}
//选择的是第一个swiper-item
swiper-item:nth-child(1) .item{
  background-color: rgb(98, 103, 112);
}
//选择的是第二个swiper-item
swiper-item:nth-child(2) .item{
  background-color: rgb(155, 201, 165);
}
swiper-item:nth-child(3) .item{
  background-color: rgb(157, 177, 214);
}

复制代码

常见组件

button,image,navigator

button标签

<!-- button按钮 -->
<button>默认按钮</button>
<button type="primary">主色调按钮</button>
<button type="warn">警告按钮</button>
<!-- 镂空 plain -->
<button size="mini" plain>小小的按钮</button>
<button size="mini" type="primary">小主色调按钮</button>
复制代码

image标签

<!-- image标签 -->
<!-- mode属性,默认是scaleToFill:不保持纵横比缩放图片,使图片宽高拉伸至刚好填满image元素 
1.图片完整显示 2. 会被拉伸的很丑哦-->
<image src="/images/QQ图片20220522090034.jpg"></image>

<!-- aspectFit 保持纵横比缩放图片,使长边刚好完全显示出来 
1. 图片完整显示 2.会留空白哦-->
<image src="/images/QQ图片20220522090034.jpg" mode="aspectFit"></image>

<!-- aspectFill 只保证短边能够刚好显示出来,
1. 图片不会完整显示 这种模式会不改变纵横比填满整个image
2. image图片的宽高不会改变-->
<image src="/images/QQ图片20220522090034.jpg" mode="aspectFill"></image>

<!-- widthFix 宽度不变,高度自适应 
1. 图片会完整显示 2. image标签的高度改变了-->
<image src="/images/QQ图片20220522090034.jpg" mode="widthFix"></image>

<!-- heightFix 高度不变,宽度自适应 
1. 图片会完整显示 2. image标签的宽度被改变了-->
<image src="/images/QQ图片20220522090034.jpg" mode="heightFix"></image>
复制代码

小程序API

三大分类:

事件监听类API

  1. 以on开头

example:wx.onWindowResize 监听窗口尺寸变化的事件

同步API

  1. 以Sync结尾
  2. 同步API的执行结果,都可以通过函数返回值直接获取,如果执行出错会抛出异常

example: wx.setStorageSync('key','value')向本地存储写入内容

异步API

  1. 需要success,fail,complete接收调用的结果

example:用wx.request()发起网络数据请求,需要success回调函数接收数据

小程序语法

插值语法

  1. 动态绑定属性

与vue不一样,无论是动态绑定内容还是动态绑定属性,都需要插值语法

<image src="{{imageSrc}}" mode="widthFix"></image>
复制代码
  1. 动态绑定数据

  2. 三元运算

<view>{{randomNum >=5?'随机数字大于等于5':'随机数字小于5'}}</view>
复制代码
  1. 算数运算
<view>{{randomNumber* 100}}</view>
复制代码

事件绑定

小程序常用事件

类型 绑定方式 事件描述
tap bindtap / bind:tap 手指轻点
input bindinput / bind:input 输入
change bindchange / bind:change 状态改变时触发

事件对象属性列表

target和currentTarget

bindtap的语法格式

wxml

<button type="primary" bindtap="btnTapHandler">点击触发事件</button>
复制代码

js

  btnTapHandler(e){
    console.log(e)

  },
复制代码

利用事件绑定改变data里面的数据

wxml

<view>{{count}}</view>
<button bindtap="countChange">+1</button>
复制代码

js

  countChange(e){
    this.setData({
      count: this.data.count+1
    })
  },
复制代码

事件传参

小程序中无法一边绑定事件一边传递参数,因为小程序的事件采用插值语法的解析方式,会误认为整体是个函数名,只能通过data_* 的方式去传递参数

wxml

<!-- 事件传参 -->
<!-- 如果不加花括号,传入的是字符串,加了花括号,传入的是数字 -->
<button type="primary" bindtap="btnTapHandler2" data-info="2">+2</button>
复制代码

js

  btnTapHandler2(e){
    this.setData({
      //dataset是一个对象,保存着所有通过data-*传递过来的参数项
      count:this.data.count+e.target.dataset.info,
    })
  },
复制代码

bindinput的语法格式

wxml

<input bindinput="inputHandler" value="12345"></input>

复制代码

js

  inputHandler(e){
    console.log(e.detail.value)

  },
复制代码

条件渲染

wxml

<!-- 条件渲染 -->
<view wx:if="{{type===1}}">男</view>
<view wx:elif="{{type===2}}">女</view>
<view wx:else>保密</view>
复制代码

结合block标签控制多个组件的展示与隐藏

<!-- 结合block标签控制多个组件的展示与隐藏 -->
<!-- 避免渲染出一些不必要的外层盒子 -->
<block wx:if="{{true}}">
<view>abc</view>
<view>def</view>
</block>
复制代码

hidden和wx:if的区别

hidden是控制样式,wx:if是动态创建和移除元素

频繁切换的时候使用hidden,如果是多个选择一个显示的时候,控制条件比较复杂,可以选择wx:if

列表渲染

wxml

<view wx:for="{{arr1}}">
索引是:{{index}}
item项是:{{item}}
</view>
复制代码

改名

<view wx:for="{{arr1}}" wx:for-index="idx" wx:for-item="itemName"></view>

复制代码

key

<!-- wx:key的使用 不用加花括号,建议把id当做key值 -->
<view wx:for="{{user}}" wx:key="no">
{{item.name}}
</view>
复制代码

wxss

具有大部分css的特性,具有扩展:1.rpx 2. @import

rpx

是微信小程序独有的,用于解决屏幕适配的尺寸单位

rpx的实现原理 :rpx把所有屏幕在横向上分为750份

rpx与px之间的单位换算: example: 在iphone6上面,屏幕宽度为375px

750rpx = 375px

1rpx=0.5 px

样式导入

@import后跟要导入的样式表的相对路径,用;结尾

当局部样式和全局样式冲突时,根据就近原则,如果局部样式权重大于或等于全局样式的权重,才会覆盖全局的样式

小程序窗口组成部分

window节点常用配置项

tabBar

tabBar的六个组成部分

tabBar节点的配置项

每个tab的配置项

json

 "tabBar": {
    "list": [
      {
        "pagePath": "pages/list/list",
        "text": "list"
      },
      {
        "pagePath": "pages/day3Afternoon/day3Afternoon",
        "text": "学习"
      }
    ]
  },
复制代码

网络数据请求

js


getInfo(){
  wx.request({
    url: 'https://www.escook.cn/api/get',
    method:'GET',
    data:{
      name:'zs',
      age:20
    },
    success:(res)=>{
      console.log(res.data)
    }
  })

},
复制代码

页面导航

声明式导航

跳转至配置为tabBar的页面

使用navigator

<navigator url="/pages/day3Morning/day3Morning" open-type="switchTab">导航到学习</navigator>
复制代码

跳转至没有被配置为tabBar的页面

open-type的属性可以省略不写

<navigator url="/pages/index/index" open-type="navigate">跳转至非TabBar页面</navigator>
复制代码

编程式导航

调用wx.switchTab(Object obj)方法,可以跳转到tabBar页面

导航至非tabBar页面

后退导航

导航传参

声明式导航传参

页面事件

下拉刷新

wxml

<!-- 下拉刷新 -->
<view>count:{{count}}</view>
<button bindtap="addCount">点我加一</button>
复制代码

js

  addCount(){
    this.setData({
      count: this.data.count+1,
    })
  },
复制代码
 /**
 * 页面相关事件处理函数--监听用户下拉动作
 */
onPullDownRefresh() {
  this.setData({
    count:0
  })
  //关闭下拉刷新
  wx.stopPullDownRefresh({
    success: (res) => {},
  })

},
复制代码

上拉处理

监听上拉触底

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom() {
    console.log("触发了上拉刷新")

  },
复制代码

案例:请求各种颜色

js

//存放获取到的数据
data: {

   colorList:[],

 },
//获取各种颜色 
 getColors(){
   wx.request({
     url: 'https://applet-base-api-t.itheima.net/api/color',
     method:'GET',
     success:({data:res})=>{
       console.log(res);
       this.setData({
         //扩展运算符(…)作用是将一个数组转为用逗号分隔的参数序列
         colorList:[...this.data.colorList,...res.data]
       })
     },
     complete:()=>{
       wx.hideLoading()
     }
   })
 },
 //触发这个函数
onReachBottom() {
   console.log("触发了上拉刷新")
   this.getColors();
   wx.showLoading({
     title: '加载中',
   })
   
复制代码

生命周期

小程序生命周期函数

  • onLaunch
  • onShow
  • onHide

页面生命周期函数

  • onLoad 监听页面加载,一个页面调用一次 ❀:初始化数据
  • onShow 监听页面显示
  • onReady 监听页面初次渲染完成,一个页面只调用一次 ❀:修改页面的样式
  • onHide 监听页面隐藏
  • onUnload 监听页面卸载

内嵌wxs代码

<view>{{m1.toUpper(name)}}</view>
<!-- 充当过滤器 -->
<wxs module="m1">
module.exports.toUpper=function(str){
return str.toUpperCase()
}
</wxs>
复制代码

总结:

  • 实现页面之间导航跳转
  • 知道如何实现下拉刷新的效果
  • 知道如何实现上拉加载
  • 能够知道常用的生命周期函数


 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

微信小程序的基本操作 的相关文章

  • Linux下Socket编程

    什么是Socket Socket接口是TCP IP网络的API Socket接口定义了许多函数或例程 程式员能够用他们来研发TCP IP网络上的应用程式 要学Internet上的TCP IP网络编程 必须理解Socket接口 Socket接
  • 七. Kubernetes Objects对象,对象状态与yaml

    目录 一 基础概念理解 二 k8s 对象中的spec与status 三 如何编写yaml 一 基础概念理解 Kubernetes Objects 官方地址 在k8s中所有操作资源实体都可以称为对象 先下图中的这些 都可以称为对象 不同对象功

随机推荐

  • 汇编语言随笔(10)-内中断及实验12(返回到dos的中断处理程序)

    不同类型内中断的区分 中断类型码 8086cpu中在下面4种情况下会产生内中断 1 除法错误 如之前提到的除法溢出 2 单步执行 3 执行into指令 4 执行int指令 那么当内中断发生时cpu如何来区分到底是哪种中断源呢 通过中断类型码
  • 代码随想录训练营day9

    题目一 实现strStr 力扣题目链接 题目描述 给你两个字符串 haystack 和 needle 请你在 haystack 字符串中找出 needle 字符串的第一个匹配项的下标 下标从 0 开始 如果 needle 不是 haysta
  • GLSL的in、out存储限制符使用错误

    在GLSL中用in修饰的变量表示传入的数据 用out修饰的变量表示传出的数据 通过这样可以实现顶点着色器向片段着色器传递数据 但要注意这个变量的命名要相同 不相同的话 片段着色器是获取不到从顶点着色器传入的数据的 1 顶点着色器 versi
  • unity打包技巧

    打包准备 1 android 需要jdk 和android sdk 如果有使用C 的库 还需要NDK 只有将 so文件放在 Assets Plugins Android libs下 Unity才会将 so文件识别为共享库 并在打包时将之拷贝
  • 分布式事务-seata AT模式-强一致性。

    目录 1 seata原理 2 关键组件 3 seate服务端参数 4 微服务配置 5 业务流程 6 依次启动eureka seate服务器 微服务 1 seata原理 Seata 是一款开源的分布式事务解决方案 致力于提供高性能和简单易用的
  • element-ui 表格一行显示多行内容并实现多行内某一行列合并

    这是加上边框的 去掉边框后这个表格看着更明显一点 表格一行放多行内容 并让第二行进行列合并 第一行不合并
  • 详解数据结构之顺序栈的基本操作(C语言描述)

    1 栈是线性表的特例 因此栈的顺序存储其实也就是线性表顺序存储的简化 我们称之为顺序栈 线性表是采用数组来实现的 因此顺序栈也采用数组来实现 2 栈的结构定义 elementype类型根据实际情况而定 这里假设为int类型 栈的结构体定义为
  • 时间序列ARIMA滚动预测

    什么是时间序列 时间序列简单的说就是各时间点上形成的数值序列 时间序列分析就是通过观察历史数据预测未来的值 在这里需要强调一点的是 时间序列分析并不是关于时间的回归 它主要是研究自身的变化规律的 这里不考虑含外生变量的时间序列 为什么用py
  • C语言结构体struct的比较

    两个struct结构体进行比较 首先不能直接比较 struct A a b a和b相比是错误的 其次不能进行内存比较 如下 程序运行的结果会如何 void DiffStructWithMultiVar struct A a 0 struct
  • 远程连接身份验证错误,找不到加密Oracle修正(正解)

    出现问题 使用远程连接弹出一个对话框 提示 发生身份验证错误 要求的函数不受支持 方法一 win r 输入gpedit msc 找到下面路径 策略路径 计算机配置 gt 管理模板 gt 系统 gt 凭据分配 设置名称 加密 Oracle 修
  • 图像质量评估

    图像质量评估 http jingyan baidu com article cbf0e500f5505a2eab28936e html 客观评价方法 图像质量的客观评价方法是根据人眼的主观视觉系统建立数学模型 并通过具体的公式计算图像的质量
  • Java基础——集合

    首先呢 给大家讲一下集合的由来 java的思想是面向对象思想 如果想统一的管理所有的对象 就涉及到用容器来储存对象 而对象数组是可以存储对象的 但是数组有一个缺点就是长度固定 为了突破这一限制 集合就应运而生了 数组和集合的优缺点 长度 数
  • 代码随想录刷题--(链表篇)19. 删除链表的倒数第 N 个结点 ---快慢指针法

    题目链接 https leetcode cn com problems remove nth node from end of list 代码随想录链接 https programmercarl com 0019 删除链表的倒数第N个节点
  • 前端实现换肤功能

    项目背景 由于项目要求 需要前端对不同的企业用户展示不一样的颜色 也就是简单的更改肤色 本来使用前端框架会很容易解决 但是公司目前的架构不是很好 前后端分离也没有那么彻底 web工程还是搭配jsp 没办法 只好用最纯粹的css来实现换肤要求
  • 一个月拿下十几份测试岗offer的简历是什么样子的?

    一 简历模板 在应聘之前 不能不聊一聊简历 简历是职场的敲门砖 是获得offer的通行证 那样对一个初级测试工程师来说 应该如何写简历呢 可能对萌新来说 完完全全不知道怎么下手 在这里大家从0开始写 第一步你需要去找一份简历模板 可以是网络
  • 实时系统RTX之理解一

    文献来源 http wzhyblog yo2 cn articles e5 ae 9e e6 97 b6 e7 b3 bb e7 bb 9frtx e5 ae 98 e6 96 b9 e6 96 87 e6 a1 a3 e4 b8 ad e
  • Windows环境下使用UHD PythonAPI开发USRP X310

    目录 UHD介绍 安装UHD 烧写X310固件 安装uhd python API 测量功率实例 UHD介绍 UHD是USRP开源软件无线电硬件架构的底层软件包 包含上位机和USRP设备中的FPGA的bit文件两个部分 提供了上位机控制FPG
  • BeanPostProcessor(Spring后置处理器)如何使用呢?

    转自 BeanPostProcessor Spring后置处理器 如何使用呢 BeanPostProcessor接口 我们通常称其为后置处理器 通过重写接口中的方法可实现初始化前后的操作 BeanPostProcessor 接口源码 pub
  • 多层感知机(MLP)算法原理和代码实现

    文章目录 多层感知机入门 算法优化原理 sklearn代码实现 核心优缺点分析 多层感知机入门 神经网络在最近几年 是个很火的名词了 常听到的卷积神经网络 CNN 或者循环神经网络 RNN 都可以看做是神经网络在特定场景下的具体应用方式 本
  • 微信小程序的基本操作

    1 搭建编辑环境 第一步 注册账号 安装微信小程序开发者工具 第二步 新建项目 不使用云服务 选择JavaScript语言 2 认识小程序项目的基本组成结构 pages 用来存放小程序所有的页面 utils 用来存放工具性质的模块 例如 格