微信小程序(由浅到深)

2023-10-27

文章目录

一. 项目基本配置

1. 项目组成

在这里插入图片描述

2. 常见的配置文件解析

  • project.config.json:项目配置文件, 比如项目名称、appid等 ; 配置详情
  • sitemap.json:小程序搜索相关的;配置详情
  • app.json:全局配置
  • page.json:页面配置;
  • app.js 可共享全局属性值

3. app.json全局的五大配置

  • pages: 页面路径列表
    • 用于指定小程序由哪些页面组成,每一项都对应一个页面的 路径(含文件名) 信息。
    • 小程序中所有的页面都是必须在pages中进行注册的。
  • window: 全局的默认窗口展示
    • 用户指定窗口如何展示, 其中还包含了很多其他的属性
  • tabBar: 顶部tab栏的展示
  • 详情配置参考
{
  "pages": [
    "pages/home/home"
  ],
  "window": {
    "backgroundTextStyle": "dark",
    "navigationBarBackgroundColor": "#f6f866",
    "navigationBarTitleText": "Weixin",
    "navigationBarTextStyle": "black"
  },
  "tabBar": {
    "color": "#777",
    "selectedColor": "#1cb9ce",
    "list": [{
        "pagePath": "pages/home/home",
        "text": "主页面”},
      {
        "pagePath": "pages/day02/day02",
        "text": "home"
      }
    ]
  },
  "style": "v2",
  "sitemapLocation": "sitemap.json"
}

4.单个页面中的page配置

  • 可直接新建page 并回车,自动添加到pages中 或者在pages中直接指定
    在这里插入图片描述

  • 同时每一个小程序页面也可以使用 .json 文件来对本页面的窗口表现进行配置。

{
  "usingComponents": {},
  "navigationBarTitleText": "主页面",
  "backgroundTextStyle": "dark",  背景文字颜色
  "enablePullDownRefresh": true,  允许下拉刷新
  "backgroundColor":"#f70", 		背景颜色
  "onReachBottomDistance": 100     距离底部多少触发事件
}
  // 下拉刷新, 获取最新的数据
  onPullDownRefresh() {
    console.log('监听下拉刷新');
    // 停止下拉刷新
    setTimeout(() => {
      // 异步请求
      wx.stopPullDownRefresh({
        success: (res) => {
          console.log('停止', res)
        },
      })
    }, 1000)

  },
  // 监听页面滚动到底部
  onReachBottom() {
    console.log('滚动到底部多少距离时加载更多~~  100px');
    this.setData({
      listCounter: this.data.listCounter + 30
    })
  }

5. App函数

  • App()实例可以全局共享的(单例对象),所以可以将一些共享数据放在这里;
  • App函数的参数

作用一

  • 判断群聊会话中打开、小程序列表中打开、微信扫一扫打开、另一个小程序打开
    • 在onLaunch和onShow生命周期回调函数中的options参数,判断scene
    • 文档参考

作用二:定义全局App的数据

  • app.js
 // app实例可以共享全局数据
  globalData: {
    userInfo: null,
    token: 'Afjwt-12mandak-45'
  }
  • home.js
 onLoad() {
    const {
      globalData
    } = getApp() // 全局的app实例
    console.log(globalData.token);
    // 拿到token发送网络请求-页面初始化
    this.setData({
      globalData
    })
  },

作用三:生命周期函数

  • 在生命周期函数中,完成应用程序启动后的初始化操作
    • 完成登录操作,获取token
      在这里插入图片描述

6.tabBar配置

  • tabBar中只能配置最少 2 个、最多 5 个 tab 页签
  • 当渲染顶部 tabBar 时,不显示 icon,只显示文本
  • 更多配置参考官网
    在这里插入图片描述
{
    "pages": [
        "pages/hone/hone",
        "pages/Profile/Profile",
        "pages/experience/experience",
        "pages/skill/skill",
        "pages/index/index",
        "pages/logs/logs"
    ],
    "tabBar":{
        "color": "#777",
        "selectedColor": "#1cb9ce",
        "list":[
            {"pagePath": "pages/hone/hone","text":"简历信息","iconPath": "/pages/img/icon08.png","selectedIconPath": "/pages/img/icon08.png"},
            {"pagePath": "pages/skill/skill","text":"个人技能","iconPath": "/pages/img/icon04.png","selectedIconPath": "/pages/img/icon04.png"},
            {"pagePath": "pages/experience/experience","text":"项目经历","iconPath": "/pages/img/icon02.png","selectedIconPath": "/pages/img/icon02.png"},
            {"pagePath": "pages/Profile/Profile","text":"自我评价","iconPath": "/pages/img/icon06.png","selectedIconPath": "/pages/img/icon06.png"}
        ]
    },
    "window": {
        "backgroundTextStyle": "light",
        "navigationBarBackgroundColor": "#fff",
        "navigationBarTitleText": "Weixin",
        "navigationBarTextStyle": "black"
    },
    "style": "v2",
    "sitemapLocation": "sitemap.json"
}

二. 基本语法,事件,单位

1. 语法

参考官网基本语法解释

  • 文本渲染
{{ msg}}可以执行简单的js表达式
{{2+3}}
{{msg.length}}
  • 条件渲染
wx:if=""
wx:elif=""
wx:else
hidden   // true 隐藏
  • 列表渲染
  • wx:key 针对不同的数组类型有不同的写法
    • 普通数组 wx:key="*this"
    • 数组对象 wx:key="字符串" 表示对象唯一属性
// 默认item就是数据 ,index是下标
wx:for="{{list}}"
wx:key="index"
	{{item}}
	{{index}}

  • 自定义列表渲染
定义item与index的名称
wx:for="{{list}}}"
wx:for-item="myitem"
wx:for-index="myidx"
{{myidx}}
{{myitem}}

2. 事件

格式:<元素 bind事件名= “回调”>

  • 示例:<view bindtap="fn1"></view>
  • <switch bindchange="fn2"></switch>
  • 小程序中绑定事件,通过bind和capture关键字来实现。如 bindtap 和 capture-bind:tap,
  • bind 是事件冒泡外传,capture 是事件捕获里传capture-bind只能用冒号形式。
  • 如果想阻止事件冒泡或捕获可通过catch来绑定事件。如catchtap,capture-catch:tap。
bindInput     表单输入时
bindconfirm    表单输入确认
bindtap      点击时候

在这里插入图片描述

  • 事件传参

    • 自定义参数 data-*
      在这里插入图片描述
      注意点: <view bindtap="handleTap(100)"></view> 小程序会以为 事件函数名称就是 “handleTap(100)” ,那么它就会去找“handleTap(100)” 这个函数 而不是 “handleTap”
  • mask传参
    在这里插入图片描述

  • 表单绑定

<input value="{{s1}}" bindinput="inputHd">
// js.js
inputHd(e){
 this.setData({s1:e.detail.value})  // 表单的值获取:e.detail.value
}
  • 事件对象属性
属性 类型 说明
type String 事件类型
timeStamp Integer 页面打开到触发事件所经过的毫秒数
target Object 触发事件的组件的一些属性值集合
currentTarget Object 当前组件的一些属性值集合
detail Object 额外的信息
touches Array 触摸事件,当前停留在屏幕中的触摸点信息的数组
changedTouches Array 触摸事件,当前变化的触摸点信息的数组
  • target和currentTarget事件对象属性
属性 类型 说明
id String 当前组件的id
dataset Object 当前组件上由data-开头的自定义属性组成的集合
  • 区别

taget点击inter不能拿到dataset数据currentTarget可以拿到

在这里插入图片描述

3. 单位

  • rpx(responsive pixel): 可以根据屏幕宽度进行自适应。规定屏幕宽为750rpx。如在 iPhone6 上,屏幕宽度为375px,共有750个物理像素,则750rpx = 375px = 750物理像素,1rpx = 0.5px = 1物理像素。
  • 具体参考官网

三. 数据响应式修改

  1. WXML 模板和 WXSS 样式工作在渲染层,JS 脚本工作在逻辑层
  2. 小程序的渲染层和逻辑层分别由2个线程管理,两个线程的通信会经由微信客户端做中转

在这里插入图片描述

  • 数据修改必须调用 this.setData 同react一样
  • setData优化

四 . 内置组件

1. button

  • button组件中的 open-type属性
    • open-type用户获取一些特殊性的权限,可以绑定一些特殊的事件
  • 老旧版本获取用户信息
<button type="primary" bindgetuserinfo="getUserInfo" size="mini" open-type="getUserInfo">getUserInfo</button>
  getUserInfo(e) {
    // 不推荐使用getUserInfo获取用户信息,预计自2021年4月13日起,getUserInfo将不再弹出弹窗,并直接返回匿名的用户个人信息
    this.setData({
      userInfo: e.detail.userInfo,
      hasUserInfo: true
    })
  },
  • 新版本获取用户头像等信息
   <button bindtap="getUserProfile"> 获取头像昵称 </button>
  getUserProfile(e) {
    // 推荐使用wx.getUserProfile获取用户信息,开发者每次通过该接口获取用户个人信息均需用户确认
    // 开发者妥善保管用户快速填写的头像昵称,避免重复弹窗
    wx.getUserProfile({
      desc: '用于完善会员资料', // 声明获取用户个人信息后的用途,后续会展示在弹窗中,请谨慎填写
      success: (res) => {
        this.setData({
          userInfo: res.userInfo,
          hasUserInfo: true
        })
      }
    })
  },

2. image

  • image组件默认宽度320px、高度240px
  • image支持懒加载
  • mode 配置如下
模式 说明
缩放 scaleToFill 不保持纵横比缩放图片,使图片的宽高完全拉伸至填满 image 元素
缩放 aspectFit 保持纵横比缩放图片,直到图片某一边碰到边界。
缩放 aspectFill 保持纵横比缩放图片,直到图片完全铺满边界。
缩放 widthFix 宽度不变,高度自动变化,保持原图宽高比不变

  • wx.chooseMedia获取本地图像展示
<button bindtap="hyImageUpload">选择图片上传</button>
<!-- 选择本地图片 -->
<image src="{{imageUrl}}"></image>
 hyImageUpload(){
    wx.chooseMedia({
      camera: 'image',
    }).then(res=>{
      this.setData({
        imageUrl:res.tempFiles[0].tempFilePath
      })
    })
  }

3. input

  • 支持双向绑定
<input type="text" model:value=" {{message}}"/>

4. 组件共有属性

  • 公共属性 :参考官网
    • 属性名 类型 描述 注解
      id String 组件的唯一标示 保持整个页面唯一
      class String 组件的样式类 在对应的 WXSS 中定义的样式类
      style String 组件的内联样式 可以动态设置的内联样式
      hidden Boolean 组件是否显示 所有组件默认显示
      data-* Any 自定义属性 组件上触发的事件时,会发送给事件处理函数
      bind* / catch* EventHandler 组件的事件 详见事件

五 . WXS使用

  • WXS(WeiXin Script)是小程序的一套脚本语言,结合 WXML,可以构建出页面的结构。
  • 在WXML中是不能直接调用Page/Component中定义的函数的.
  • 但是某些情况, 可以使用函数来处理WXML中的数据(类似于Vue中的过滤器),这个时候就使用WXS了
  • 必须利用es5语法
// 
<wxs module="format">
  function joinTgether(num) {
    return '¥' + num
  }
  // 必须模块化导出 
  module.exports={
    joinTgether:joinTgether
  }
</wxs>

<block wx:for="{{wxs}}" wx:key="*this">
  <button size="mini" type="warn">{{item}}-{{format.joinTgether(item)}}</button>
</block>
  • 模块抽离utils 必须放在.wxs结尾的文件
<button>模块抽离wxs</button>
<wxs module="format" src="/utils_wxs/format.wxs"></wxs>
<block wx:for="{{wxs}}" wx:key="*this">
  <button size="mini" type="warn">{{item}}-{{format.joinTgether(item)}}</button>
</block>

在这里插入图片描述

  • 每个模块都有自己独立的作用域。即在一个模块里面定义的变量与函数,默认为私有的,对其他模块不可见;
  • 一个模块要想对外暴露其内部的私有变量与函数,只能通过 module.exports 实现;
  • 其他使用参考官网

六,组件

6.1 全局与局部组件注册使用

  • 将页面拆分成一个个小的、可复用的组件,这样更加方便组织和管理,并且扩展性也更强
  • .json 文件中进行自定义组件声明(将component 字段设为 true 可这一组文件设为自定义组件):

在这里插入图片描述

  • 在需要使用的xx.json 文件中导入
{
  "usingComponents": {
    "sel-info": "/components/selection-info/sel-info"
  }
}
  • 自定义组件和页面所在项目根目录名 不能以“wx-”为前缀,否则会报错。
  • 全局组件在app.json的usingComponents声明某个组件,那么所有页面和组件可以直接使用该组件

6.2 组件样式

  • 组件内的样式 对 外部样式 的影响

    • 结论一:组件内的class样式,只对组件wxml内的节点生效, 对于引用组件的Page页面不生效。
    • 结论二:组件内不能使用id选择器、属性选择器、标签选择器
      在这里插入图片描述
  • 外部样式 对 组件内样式 的影响

    • 结论一:外部使用class的样式,只对外部wxml的class生效,对组件内是不生效
    • 结论二:外部使用了id选择器、属性选择器不会对组件内产生影响
    • 结论三:外部使用了标签选择器,会对组件内产生影响
  • 如何让class可以相互影响

    • Component对象中,可以传入一个options属性,其中options属性中有一个styleIsolation(隔离)属性。
    • styleIsolation有三个取值:
      • isolated 表示启用样式隔离,在自定义组件内外,使用 class 指定的样式将不会相互影响(默认取值);
      • apply-shared 表示页面 wxss 样式将影响到自定义组件,但自定义组件 wxss 中指定的样式不会影响页面;
      • shared 表示页面 wxss 样式将影响到自定义组件,自定义组件 wxss 中指定的样式也会影响页面和其他设置 了
  options: {
    // styleIsolation:"isolated"  // 默认值
    styleIsolation: "apply-shared"
  },

6.3 组件之间的通信

在这里插入图片描述

  1. 定义子组件
<view style="width: 100%;height:80px;background-color: blueviolet;">
  <button>{{title}}</button>
  <view style="background-color: brown;margin-top: 10px; color: cornsilk;"> {{content}}</view>
</view>
  1. 子组件做数据接收并默认值
 properties: {
    title: {
      type: String,
      value: '默认标题'
    },content:{
      type:String,
      value:'默认内容'
    }
  },
  1. 父组件使用子组件并传递值
<props-data />
<view class="styl">
  <props-data title="通信" content='组件通信-传递参数-动态数据' />
</view>
<props-data title="z组件传参" content='组件通信-传递参数-动态数据' />

组件传递样式 -externalClasses

  • 在Component对象中,定义externalClasses属性
  • 在组件内的wxml中使用externalClasses属性中的class
  • 在页面中传入对应的class,并且给这个class设置样式
    在这里插入图片描述
    自定义事件
    在这里插入图片描述
    页面直接调用组件方法 相当于vue中ref
    • 可在父组件里调用 this.selectComponent ,获取子组件的实例对象。
    • 调用时需要传入一个匹配选择器 selector,
      在这里插入图片描述

6.4 单个插槽的使用

  • 组件的插槽也是为了让我们封装的组件更加具有扩展性

在这里插入图片描述

  • 注意slot 不支持默认值 可以利用兄弟选中器解决

在这里插入图片描述

  1. 子组件预留插槽
<view class="myslot">
  <view class="header">header</view>
  <!-- 小程序插槽不支持默认值 -->
  <view class="content">
    <slot></slot>
  </view>
  <view class="default">兄弟选择器解决默认值</view>
  <view class="footer">footer</view>
</view>
  1. 父组件传递结构
<my-slot>
  <button>按钮</button>
</my-slot>
<my-slot>
  <button size="mini" type="primary">default样式</button>
</my-slot>
<my-slot>
</my-slot>
  1. 兄弟选择器解决默认值问题
.default{
  display: none;
}
.content:empty + .default{
  display: block;
}

6.5 多个插槽的使用

在这里插入图片描述

  1. 子组件预留插槽
<view class="slot">
  <view class="t">
    <text >上插槽</text> : 
     <slot name="t"></slot>
  </view>
  <view class="c">
    <text>中间插槽</text> : 
    <slot name="c"></slot>
  </view>
  <view class="b">
    <text>下插槽</text> : 
    <slot name="b"></slot>
  </view>
</view>
  1. 允许可以定义多个插槽
Component({
  // 允许定义多个插槽
  options: {
    multipleSlots: true
  },
})
  1. 父组件传递结构

<more-slot>
  <text slot="t">上插入</text>
  <text slot="c">中间插入</text>
  <text slot="b">下插入</text>
</more-slot>

6.6 混入

  • behaviors 是用于组件间代码共享的特性,类似于Vue中的 “mixins”
    • 每个 behavior 可以包含一组属性、数据、生命周期函数和方法;
    • 组件引用它时,它的属性、数据和方法会被合并到组件中,生命周期函数也会在对应时机被调用;
    • 每个组件可以引用多个 behavior ,behavior 也可以引用其它 behavior
    • 文档参考
  1. 编写混入
export const counterMinxin = Behavior({
  data: {
    counter: 100
  },
  methods: {
    add() {
      //  加一修改 ,不应该使用++,这会导致counter在修改this..data.counter也在修改
      this.setData({
        counter: this.data.counter + 1
      })
    }
  }
})
  1. 使用
import { counterMinxin } from "../../behaviors/counter"
Component({
  behaviors: [counterMinxin],
})

6.7 组件生命周期

Component({
  behaviors: [counterMinxin],
  lifetimes:{
    created(){
      console.log('组件被创建');
    },
    attached(){
      console.log('组件添加到dom树中');
    },
    detached(){
      console.log('组件被删除');
    }
  }
})

6.8 数据侦听

文档参考链接

七 .生命周期

7.1.应用生命周期

应用生命周期钩子函数

属性 说明
onLaunch 生命周期回调——监听小程序初始化。
onShow 生命周期回调——监听小程序启动或切前台。
onHide 生命周期回调——监听小程序切后台。
onError 错误监听函数。
  • 参数对象
    • 一般放在生命周期钩子函数的第一个参数。onLaunch钩子函数的参数对象为
      在这里插入图片描述

7.2 页面生命周期

属性 说明
onLoad 生命周期回调—监听页面加载
onShow 生命周期回调—监听页面显示
onReady 生命周期回调—监听页面初次渲染完成
onHide 生命周期回调—监听页面隐藏
onUnload 生命周期回调—监听页面卸载
onPullDownRefresh 监听用户下拉动作
onReachBottom 页面上拉触底事件的处理函数
onShareAppMessage 用户点击右上角转发
onShareTimeline 用户点击右上角转发到朋友圈
onAddToFavorites 用户点击右上角收藏
onPageScroll 页面滚动触发事件的处理函数
onResize 页面尺寸改变时触发,详见 响应显示区域变化
 // 1. 页面路径 
 pages/index/index?id=10086&name='admin'
 // 2. onLoad 获取参数
 onLoad(query){}

7.3.组件生命周期

属性 说明
created 组件生命周期函数 - 在组件实例刚刚被创建时执行,注意此时不能调用 setData )
attached 组件生命周期函数 - 在组件实例进入页面节点树时执行)
ready 组件生命周期函数 - 在组件布局完成后执行)
moved 组件生命周期函数 - 在组件实例被移动到节点树另一个位置时执行)
detached 组件生命周期函数 - 在组件实例被从页面节点树移除时执行)

八 . API解析

8.1网络请求

  wx.request({
      url: "api",
      data: {
        page: 1
      },
      success: res => {
        console.log(res);
      },
      fail: err => {}
    })
  • 封装

//0. 封装成函数
export function hyRequest(options) {
  return new Promise((resolve, reject) => {
    wx.request({
      ...options,
      success: res => {
        resolve(res.data)
      },
      fail: reject
    })
  })
}

//0. 类的方法封装
class hyService {
  request(options) {
    return new Promise((resolve, reject) => {
      wx.request({
        ...options,
        success: res => {
          resolve(res.data)
        },
        fail: reject
      })
    })
  }
  get(options) {
    return this.request({ ...options, method: 'GET'})
  }
  post(options) {
    return this.request({
      ...options,
      method: 'POST'
    })
  }
}
export const serviceResponse = new hyService()
// 1. 导入
import {hyRequest} from '../../service/request'
// 2. 使用封装调用api
  hyRequest({url:"http://123.207.32.32:1888/api/city/all"}).then(res=>{
      console.log(res);
    })

8.2 展示弹窗效果

8.3 获取设备|位置信息

  • 获取当前设备的信息,用于手机信息或者进行一些适配工作wx.getSystemInfo(Object object)
  • 官网参考
  • 获取用户的位置信息,以方便给用户提供相关的服务wx.getLocation(Object object)
reqInfo() {
    // 获取设备信息
    // 我们需要经常获取当前设备的信息,用于手机信息或者进行一些适配工作
    wx.getSystemInfo({
      success: arr => {
        console.log(arr);
      }
    }),
    wx.getLocation({
      success:err=>{
        console.log(err);
      }
    })
  }
 "permission": {
    "scope.userLocation": {
      "desc": "位置信息将用于小程序位置接口的效果展示"
    }
  }

8.4 Storage存储

  • 同步存取数据的方法:
    • wx.setStorageSync(string key, any data)
    • wx.getStorageSync(string key)
    • wx.removeStorageSync(string key)
    • wx.clearStorageSync()
  • 异步存储数据的方法:
    • wx.setStorage(Object object)
    • wx.getStorage(Object object)
    • wx.removeStorage(Object object)
    • wx.clearStorage(Object object)
  • 具体使用参考

8.5 页面跳转

  • 通过navigator组件 和 通过wx的API跳转
  • 路由跳转参考配置
    在这里插入图片描述
    页面跳转 - navigateTo
    注意 跳转的页面是tarBar内的页面,需要使用wx.switchTab({})
 navigateTo() {
    // 跳转的页面是tarBar内的页面,需要使用wx.switchTab({}) 
    wx.navigateTo({
      // url: '/navPage/navigateTo/index',
      // 传参
      url: '/navPage/navigateTo/index?name=admin',
    })
  }
  • 接受页面跳转的参数
Page({
  // options接受路径参数
  onLoad(options) {
    console.log(options);
  },
})

8.6 回退页面传参

  • 主页面
Page({
  navigateTo() {
    // 方式二
    wx.navigateTo({
      url: '/navPage/navigateTo/index?name=admin',
      events: {
        backEvent(data) {
          console.log('接受跳转的参数', data);
        }
      }
    })
  }
})
  • 跳转的页面
Page({
  up() {
    wx.navigateBack()
    // //  传递数据给上一级
    // const pages = getCurrentPages()
    // //读取最后一个页面,的实例
    // const prePage = pages[pages.length - 2]
    // // 设置上一个页面的数据
    // prePage.setData({
    //   message: 'admin'
    // })
    // console.log(pages);

    const eventChannel = this.getOpenerEventChannel()
    eventChannel.emit('backEvent', {
      name: 'admin',
      pad: 'password'
    })
  },
  // 回退过多可以直接在onLoad里面设置
  onUnload() {
    const pages = getCurrentPages()
    const prePage = pages[pages.length - 2]
    prePage.setData({
      message: 'admin',
      username: 'password'
    })
  },
})

九 .登录流程

  • 配置参考
    在这里插入图片描述
    openid: 用户唯一标识
    session_key: 是对用户数据进行 加密签名 的密钥。为了应用自身的数据安全,开发者服务器不应该把会话密钥下发到小程序,也不应该对外提供这个密钥
// app.js
App({
  onLaunch() {
    // 展示本地存储能力
    const logs = wx.getStorageSync('logs') || []
    logs.unshift(Date.now())
    wx.setStorageSync('logs', logs)
    // 登录
    wx.login({
      success: res => {
        // 发送 res.code 到后台换取 openId, sessionKey, unionId
        const code = res.code
        wx.request({
          url: 'url',
          data: {
            code
          },
          method: 'POST',
          success: res => {
            const token = res.data.token
            wx.setStorageSync('token', token)
          }
        })
      }
    })
  },
})

十. 分包预下载

  • 小程序要求压缩包体积不能大于2M,否则无法编译发布;
  • 在实际项目中,体积大于2M时就需要通过分包机制进行发布上传;
  • 对小程序进行分包,可以优化小程序首次启动的下载时间,因为分包后主包体积小了,有效提高用户体验;
  • 将小程序划分成不同的子包,在构建时打包成不同的分包,用户在使用时按需进行加载,提高了程序性能;
  • 具体分包说明参考
  • 分包预下载 通过在 app.json 增加 preloadRule 配置来控制
	"subPackages": [
		{
			"root": "pagesMember",
			"pages": [
				{
					"path": "setting/setting",
					"style": {
						"navigationBarTitleText": "设置"
					}
				}
			]
		}
	],
	// 预下载
	"preloadRule": {
		"pages/my/my": {   // 进入my主页 自动预下载pagesMember包
			"network": "all",
			"packages": [
				"pagesMember"
			]
		}
	}

在这里插入图片描述

  • 注意 同一个分包中的页面享有共同的预下载大小限额 2M,限额会在工具中打包时校验
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

微信小程序(由浅到深) 的相关文章

  • 【计算机毕业设计】趵突泉景区的智慧导游小程序_5ztvv

    当今社会已经步入了科学技术进步和经济社会快速发展的新时期 国际信息和学术交流也不断加强 计算机技术对经济社会发展和人民生活改善的影响也日益突出 人类的生存和思考方式也产生了变化 传统趵突泉景区的智慧导游采取了人工的管理方法 但这种管理方法存
  • 删除“NUL”字符

    我的记事本 中有这样的字符 当我尝试复制整行时 我实际上正在复制所有内容 直到 NUL File 1 我想做的就是替换那些空的 什么都没有 这样我就可以复制我的整行 也许有任何关键字可以告诉记事本 或任何其他可能有帮助的程序 替换这些字符
  • 删除包含该单词的每一行

    如果该行包含特定单词 例如 我想删除整行 cat If cat 就在这一行 删除整行 Example Before 0123456789 CAT 0912WORDS 53DAD DSFC09243 DOG KLJ0963 CAT 8953
  • Notepad++ 不突出显示 HTML 文件中的 css [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 在 Notepad 中 HTML 文件中的 CSS 没有语法突出显示 可以启用吗 这个问题已在超级用户中得到回答不同语言语法突出显示 ht
  • C# - 如何在没有 IDE/Visual Studio 的情况下编写程序? [关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 我正在 Notepad 和 MonoDevelop 中仅使用 cs 文件而不是解决方案来制作 C 控制台应用程序 我从 CMD 编译代码 我
  • 使用Notepad++编译Java代码

    我一直在尝试将 Notepad 设置为一个小型 Java 环境 主要是为了学习 Java 因为我在获得一个与 NetBeans 一起使用的简单程序时遇到了一些困难 不幸的是 所有关于设置 Notepad 来调用 Java 代码的建议都不起作
  • 删除所有换行符并将其添加到特定文本之后

    我有一个文本文件 其中必须删除所有换行符 然后在每个文本后添加新的换行符 我怎样才能使用替换工具做到这一点 您至少需要分两步完成 首先 单击工具栏中的 符号 您可以查看是否有CRLF行结尾或只是LF 单击 替换 按钮 然后将 r n or
  • 在 Notepad++ 中格式化代码

    Notepad 中是否有用于格式化代码的键盘快捷键 我主要处理 HTML CSS 和 Python 代码 例如 To
  • VS2015 或 NP++ 中的多行正则表达式

    我需要在多个文件中替换以下模式 this dialogs 当我设置时这工作正常single line在这里标记 https regex101 com r dF2yG3 2 https regex101 com r dF2yG3 2 但是我无
  • notepad++ 用户定义的折叠区域

    我不知道如何配置记事本 来显示用户定义的关键字的区域 我有一个很大的跟踪文件 它显示了过程的开始和结束 跟踪文件如下所示 Beginn abc def Beginn ghi jkl Ende ghi jkl Ende abc def 我想像
  • 使用 Notepad++ 删除 : 之后少于或等于 5 个字符的行

    问题是这样的 使用 Notepad 删除 之前少于 5 个字符的行 https stackoverflow com questions 50463273 remove lines that is shorter than 5 charact
  • 如何在 Notepad++ 中禁用“shift”+“alt”键盘快捷键

    The shortcut Shift Alt changes the keyboard configuration 如何禁用此快捷方式 我搜索了快捷方式地图 但没有找到 那肯定是 Windows IME 快捷方式 它可能与 Notepad
  • 如何更改 Notepad++ 更改文本行的背景颜色?

    更新 未保存 的文本行有亮粉色 ffc286 背景色 更改和保存的文本行有亮绿色 b5ffb5 此背景对于任何颜色样式都是相同的 我在样式配置器中找不到它 我以为它可能是增量突出显示 但事实并非如此 并且它不在全局设置中 我已经在寻找这个值
  • 如何在Notepad++中将大写字母转换为小写字母

    我主要使用 Notepad 进行编码 如何将大写字母转换为小写字母 反之亦然 只需选择要更改的文本 右键单击并根据需要选择大写或小写
  • 如何删除 Notepad++ 中的特定行?

    我正在清理一些代码文件 C 并想要删除这些区域 我想删除所有包含字符串 region 的行 这只是一个例子 我可以想到更多的用途 但这可能吗 记事本 v6 5 Search菜单 gt Find gt Mark选项卡 gt 查找内容 您的搜索
  • Notepad++ 将鼠标悬停在链接或颜色上进行预览?

    我想知道是否有一个选择或plugin 这使我们能够悬停预览要么是CSS颜色 or image 像这样 而且如果你将鼠标悬停在 img src 上 预览图片 尝试 Notepad 快速颜色选择器 双击十六进制颜色 会弹出一个颜色选择器以及预览
  • 编写无 BOM 的 UTF-8

    这段代码 OutputStream out new FileOutputStream new File C file test txt out write A getBytes 和这个 OutputStream out new FileOu
  • Notepad++ SourceCookifier 插件在大型 C++ 标头上非常慢

    我喜欢在 Notepad 中浏览我的 C 项目 我使用 SourceCookifier 插件来轻松地在大文件的定义之间跳转 但是 如果我加载一个大的 C 头文件 大约 30 000 行 其中有很多 define and typedef里面的
  • 有没有人有 Ruby 和 Rake 的 Notepad++ 函数列表插件的解析规则

    我使用 Notepad 编辑 rake 文件 并且希望能够使用函数列表插件 我无法在线找到任何解析规则 并且 语言解析规则 对话框没有非常清晰的记录 我正在将方法解析到以下列表中 但还想显示任务 Function Begin t def t
  • Notepad++ - 使函数“可点击”?

    我只是想这可能有用 但我找不到办法 在 Notepad 中 有没有一种方法可以使函数名称 可单击 即使它们成为链接 这样如果您单击它们 它会自动将您带到其定义 最好是跨整个代码库 目前还没有插件提供可直接单击的函数名称 但您可以尝试使用 S

随机推荐

  • ChaosBlade 项目指南:我是如何为社区贡献 Redis 故障场景

    01 Redis 新特性介绍 1 1 背景 Redis 实际使用过程中会存在一些故障演练需求 例如 模拟触发所有 key 过期的极端故障场景 模拟主动触发 Redis 内存淘汰策略释放内存场景等等 所以 根据以上故障演练需求 决定对 Cha
  • MathType7.4mac最新版本数学公式编辑器安装教程

    MathType7 4中文版是一款功能强大且易于使用的公式编辑器 该软件可与word软件配合使用 有效提高了教学人员的工作效率 避免了一些数学符号和公式无法在word中输入的麻烦 新版MathType7 4启用了全新的LOGO 带来了更多对
  • Boost asio的async_write函数

    Boost asio是一个异步网络通信的库 其中async write是一个比较常用的函数 但是 如果没有正确的使用 就可能会出现一些意想不到的潜在Bug 例如下面的代码 1 2 3 4 5 6 7 8 9 10 11 12 13 14 1
  • java ---学生信息管理系统

    Student 学生类 package 学生信息管理系统 学生类 public class Student 学号 private String sid 姓名 private String name 年龄 private String age
  • 不重装系统解决win10更新错误0x800f0922

    最近win10突然就不能更新了 一直提示无法完成更新 正在撤销更改 尝试了以下处理都无效 1 网络问题 2 net framework没有启用 3 sfc scannow 和 DISM exe Online Cleanup image Sc
  • 快速排序和堆排序算法的比较与详解

    快速排序 原理 1 通过partion函数将列表最左边的数归位 归位的这个数左边的数都是比他小的 右边都是比他大的数 2 通过partion函数递归 将每一个数归位 partion函数解读 关键问题 left
  • vue+element ui 上传文件,显示的文件参数内容只有uid

    现象 使用elment ui的el upload组件上传文件 会导致上传的文件参数file里面只包含uid 没有其他信息 file uid 52688455 其他参数 xxxx 过程 在网上查资料 首先发现 是没有设定content typ
  • CSS旋转的环形文字效果

  • 微积分

    对于微积分已经是过去式了 早就不知道说的是什么了 今天学习一波 微积分 Calculus 微积分是高等数学中研究函数的微分 积分以及有关概念和应用的数学分支 它是数学的一个基础学科 内容主要包括极限 微分学 积分学及其应用 微分学包括求导数
  • 利用Puppeteer实现验证码网站登录

    Puppeteer puppeteer是由Google官方推出的一个node库 可以启动Chromium浏览器模拟人为操作 类似于PhantomJS 这为爬虫和自动化测试提供了便利 流程 登录流程很简单 启动puppeteer打开目标网站
  • ABAP 传入数据到EXCEL自编函数

    DATA excel TYPE ole2 object workbook TYPE ole2 object sheet TYPE ole2 object cell TYPE ole2 object column TYPE ole2 obje
  • Servlet 清除Cookie 方法

    一 删除已知名称的Cookie 方案 重新建立同名立即删除类型的Cookie Cookie newCookie new Cookie username null 假如要删除名称为username的Cookie newCookie setMa
  • 工作流简介及其6种常用的工作流引擎

    先说说四个非PetriNet调度算法的开源引擎 4 OBE的引擎调度机制 4 Shark的引擎调度机制 5 OSWorkflow的引擎执行机制 6 JBpm的引擎执行机制 6 再说说两个PetriNet调度算法的开源引擎 9 YAWL的引擎
  • 图说函数模板右值引用参数(T&&)类型推导规则(C++11)

    图说函数模板右值引用参数 T 类型推导规则 C 11 见下图 规律总结 只要我们传递一个基本类型是A 的左值 那么 传递后 T的类型就是A 形参在函数体中的类型就是A 只要我们传递一个基本类型是A的右值 那么 传递后 T的类型就是A 形参在
  • 解析Cloudsim中,获取SLA指标的函数:getSlaMetrics()

    protected static Map
  • 如何使用 Humata.ai:快速理解和总结文献

    链接 Humata 简介 Humata ai 是一个人工智能驱动的文献阅读助手 可以帮助用户快速理解和总结文献 它可以提取文献的关键信息 并以简洁易懂的语言生成摘要 此外 Humata ai 还可以回答用户关于文献的问题 帮助用户深入理解文
  • 选择一家公司看哪些条件

    1 薪资 公司谈的工资都是税前 一般我会认为年薪工资指的就是一年的税前收入 如果有加班费可以把加班费也算上 每月加班时间是有上限的 可以根据个人习惯计算 然后是年终奖 则税前年薪 税前基本工资 加班费 年终奖 你看工资银行卡一年的薪资到账记
  • xcode报错:Command /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/b

    今天使用xcode编译工程发现一个问题 这里记录一下防止忘记 xcode报错 Command Applications Xcode app Contents Developer Toolchains XcodeDefault xctoolc
  • 本地部署Stable Diffusion

    效果 遇到的坑 报错 RuntimeError LayerNormKernelImpl not implemented for Half 解决方案 产生报错的原因是因为显卡不支持half float的数据类型 所以在启动项set COMMA
  • 微信小程序(由浅到深)

    文章目录 一 项目基本配置 1 项目组成 2 常见的配置文件解析 3 app json全局的五大配置 4 单个页面中的page配置 5 App函数 6 tabBar配置 二 基本语法 事件 单位 1 语法 2 事件 3 单位 三 数据响应式