微信小程序笔记

这篇博客详细介绍了微信小程序的开发,包括项目组成、文本和条件渲染、API使用、生命周期、网络请求、组件定义与自定义组件生命周期等内容,还涉及到页面跳转、数据管理以及微信特定的生命周期回调函数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

定义

微信里面app

    16年推出
    竞品:支付宝小程序,钉钉,美团,头条,抖音qq小程序

优点
    在微信自由分享
    不用下载app
    能快速的开发,使用微信的api接口

开发者
    内存,源码,图片,存储,接口与数据都有限制

网址
    注册一个微信小程序
        https://mp.weixin.qq.com/wxopen/waregister?action=step1

    下载微信小程序开发工具
        https://developers.weixin.qq.com/miniprogram/dev/devtools/download.html

项目组成

小程序的模板语法约等于vue的模板语法

文本渲染

        {{ msg}}
        可以执行简单的js表达式
            {{2+3}}
            {{msg.length}}

条件渲染

        wx:if=""
        wx:elif=""
        wx:else

列表渲染

        wx:for="{{list}}" wx:key="index"
            {{item}}
            {{index}}

自定义列表渲染

        定义item与index的名称
        | wx:for="{{list}}}"
        | wx:for-item="myitem"
        | wx:for-index="myidx"
        | 
        | {{myidx}}
        | {{myitem}}
        | 

导入

        import
            只能导入template内容
            template/utils.wxml
            home.wxml
                | <template name="userCart">
                |   用户名:{{name}}
                | </temlate>
                <import src="/template/utils.wxml">
                
                <tempate is="userCart" data="{{...u1}}">


        include
            只能导入非template内容
            template/foot.wxml
                {{内容}}

            home.wxml

wxss

    默认单位是rpx
    750rpx等于一个屏幕的宽 375就是50%的宽

事件

    bindInput 表单输入时
    bindconfirm 表单输入确认
    bindtap 点击时候

事件的传参

    <button data-msg="xxx" bindtap="tapHd">
    获取事件的参数e.target.dataset.msg

表单的绑定

    <input value="{[s1})" bindinput="inputHd">
    inputHd(e){this.setData({s1:e.detail.value)}
    表单的值获取: e.detail.value

内置的api

    showToast 显示提示
    
    | 本地存储
    | wx.setStorageSync(key,value)
    | 本地取
    | wx.getStorageSync(key)
    | 
    wx.request 网络请求

生命周期

    onLoad页面加载完毕

更新数据与视图

    this.setData({k:v})

todo

    设计数据list存储数据
        
        | {
        | done:true,是否完成
        | title:”“显示的文本
        | }
        | 

    temp
        和输入框进行双向绑定的临时数据

    方法
        添加
        删除

内置组件

    view组件 块组件
    text 组件 行内组件

页面配置

"enablePullDownRefresh": true,  //允许下拉刷新
"backgroundTextStyle": "dark", // 背景文字颜色
"backgroundColor":"#f70", //背景颜色
"usingComponents": {} //组件

小程序的限制

    源文件大小
        每个包不能超过2M
        总共不能超过16-20M

    页面缓存堆栈5层
    底部栏
        最少2个最多5个
        底部栏图片31k

    功能和微信一致(右上角胶囊按钮,下拉刷新。。。)
    本地存储 1次1M最多100M
    setData o不能超过1M

小程序的页面跳转

    <navigator>
        url 跳转的地址
        open-type 
        打开类型
            navigate 普通跳转
            navigateBack 返回
            redirect 重定向
            switchTab 跳转底部栏
            reLaunch 重启

api跳转

        wx.navigateTo 跳转
        wx.switchTab切换底部栏
        wx.redirect重定向wx.reLaunch重启

页面栈

    A页面   B 页面  C 页面   D 页面  E 页面

    通过 open-type = "navigate" 页面会缓存起来  最多缓存5层
    A页面->redirect B页面  A页面是不会被缓存
    E 页面  "navigateBack" 到 D页面   (页面的缓存移除一次)
    总结:navigate会增加一层缓存页面  redirect 会替换一层缓存页面  navigateBack 会移除一层缓存页面

页面传参

    小程序页面传参主要通过 查询传参
    传:url=“xxxx/xxx?name=mumu&age=18”
    接收:onLoad options参数接收
        options.name   options.age

底部导航配置

 "tabBar": {
 "color": "#777",
 "selectedColor": "#1cb9ce",
 //list内至少2个导航
 "list": [
 {
 "pagePath": "pages/yidian/yidian",
 "text": "一点",
 "iconPath": "",//图片路径
 "selectedIconPath": ""//图片路径(选中状态)
 },
 {
 "pagePath": "pages/nav/nav",
 "text": "跳转",
 "iconPath": "",
 "selectedIconPath": ""
 }
 ]
 },

全局数据

    app.js的globalData
        定义
            app.js的globalData

        页面使用
            var app  = getApp();
            app.globalData.num


    本地存储

npm安装包

    初始化项目 
        npm init -y

    安装插件
        npm i @vant/weapp -S --production

    app.json删v2(整行)
    修改project.config.js
{
...
"setting": {
...
"packNpmManually": true,
"packNpmRelationList": [
{
"packageJsonPath": "./package.json",
"miniprogramNpmDistDir": "./miniprogram/"
}
]
}
}

        注意: 由于目前新版开发者工具创建的小程序目录文件结构问题,npm构建的文件目录为miniprogram_npm,并且开发工具会默认在当前目录下创建miniprogram_npm的文件名,所以新版本的miniprogramNpmDistDir配置为'./'即可

封装request;

 //基础的url
 const URL={
   baseURL:"http://dida100.com"
 }
 // {name:"mumu",age:18} => name=mumu&age=18
 function tansParam(obj){
 var str="";
 for(var k in obj){
 str+=k+"="+obj[k]+"&";
 }
 //移除最后一个&
 return str.slice(0,-1);
 }
 function request(option){
 var url=option.url;
 // 01 可以添加baseURL
 //请求的地址如果以http开头直接用url,不是http 添加我们baseURL
 url=url.startsWith("http")?url:URL.baseURL+url;
 //选项里面有promise
 if(option.params){
 // 如果有参数,把参数转换为url编码形式加入
 url+="?"+tansParam(option.params);
 }
 // 02 可以添加请求头
 var header=option.header||{};
 header.Authorization="Bearer "+wx.getStorageSync('token');
 // 03 可以添加加载提示
 if(option.loading){
 wx.showToast({
       title: option.loading.title,
       icon:option.loading.icon,
 })
 }
 // 返回一个promise
 return new Promise((resolve,rejects)=>{
 wx.request({
 //请求的地址如果以http开头直接用url,不是http 添加我们baseURL
       url:url,
       method:option.method||"GET",//请求的方法 默认get
       data:option.data, //post出入的参数
 header,
 success(res){
 //请求成功
 resolve(res.data);
 },
 fail(err){
 //请求失败
 uni.showToast({title:"加载失败",icon:"none"})
 rejects(err);
 },
 complete(){
 //关闭加载提示
 wx.hideToast();
 }
 })
 })
 }
 request.get=(url,config)=>{
 return request({url,method:"get",...config})
 }
 request.post=(url,data,config)=>{
 return request({url,method:"post",data,...config})
 }
 // 导出request
 module.exports={request}

分包

{
  "pages":[
    "pages/index",
    "pages/logs"
  ],
  "subpackages": [
    {
      "root": "packageA",
      "pages": [
        "pages/cat",
        "pages/dog"
      ]
    }, {
      "root": "packageB",
      "name": "pack2",
      "pages": [
        "pages/apple",
        "pages/banana"
      ]
    }
  ]
}

网络

  1. 小程序请求的地址必须https
  2. 小程序请求的地址必须和后台约定的

如果不没有使用约定的地址(只能测试不能上线)
手机中测试 右上角三个点击打开调试
重启后网络请求

微信的生命周期

小程序生命周期

onLaunch 启动(本地存储,登录)
onShow前台展示开始播放与运行
onHide后台运行(停止播放与运行)
onError发生错误(监听处理错误)

页面的生命周期

生命周期
onLoad 加载完毕(获取页面传参,初始化,网络请求,本地出错)
onReady首次渲染完毕(获取节点)
onShow前台显示
onHIde后台运行
onUnload 页面被卸载

固定回调函数

onPullDownRefresh 下拉属性
在json中配置
enablePullDownRefresh
停止下拉刷新
wx.stopPullDownRefresh()
onReachBottom 上拉触底
onShareAppMessage 右上角分享
onShareTimeline 分享到朋友圈
onPageScroll 页面滚动
e.scrollTop
页面滚动的距离

wx.pageScrollTo({
      duration: 600,
      scrollTop:0,
    })

将页面滚动到指定的位置
也可以指定滚动到指定的元素
onTabItemTap 页面底部栏被点击

button的

开放能力
open-type:
share 触发分享
getPhoneNumber 获取用户的手机号
getUserInfo 获取用户信息
chooseAvatar 获取用户的头像

节点信息

创建一个选择器 const query = wx.createSelectorQuery()
选中h1节点 获取他的边界 query.select(‘.h1’).boundingClientRect()
选中所有h1节点 获取他的边界 query.selectAll(‘.h1’).boundingClientRect()
获取窗口的位置信息 query.selectViewport().scrollOffset();
执行查询操作放回结果 query.exec(function(res){})

组件

在这里插入图片描述

组件的样式

样式的隔离
	options:{
    // 样式隔离:apply-shared 父影响子,shared父子相互影响, isolated相互隔离
    styleIsolation:"isolated",
},

外部类

	externalClasses:["cell-class"],
	<view class="cell cell-class">我是cell组件</view>
	页面中
		<cell cell-class="mycell"></cell>


mycell{
line-height: 120rpx !important;
color:#F70;
}

组件的插槽

默认插槽
	父组件
<cell>
      <text>插槽内容</text>
</cell>
	子组件
<view><slot></slot></view>
命名多插槽
	父组件
<cell>
    <text slot="pre"> 🚒</text>
    <text slot="next">🥗</text>
</cell>
	子组件
options:{ multipleSlots:true}
<view>
    <slot name="pre"></slot>
    <slot name="next"></slot>
</view>

组件的传参

父传子
	property
子传参父
	triggerEvent

自定义组件Component

生命周期  lifetimes
   attach  组件的挂载
data 数据
methods 方法
properties 属性(只读)
externalClasses 外部类
options选项
	multipleSlots:true 多个插槽
	styleIsolation:"isolated" 组件的样式格式

自定义组件生命周期

组件的生命周期  lifetimes
	created 创建
		此时还不能调用 setData
	    attached 挂载  
	    detached 卸载
页面的生命周期  pageLifetimes
	   show 显示
	   hide 后台运行
	   resize 尺寸变化
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值