对微信小程序的理解

2023-10-27

前言

相信很多人对微信小程序都比较情有独钟,首先大家应该知道小程序的优点,它实现了应用“触手可及”的梦想,用户扫一扫或者搜一下即可打开应用。也体现了“用完即走”的理念,用户不用关心是否安装太多应用的问题。应用将无处不在,随时可用,但又无需安装卸载。

历史

从2016/9/21微信小程序发展以来发生了千变万化的变化,在此过程中增加了

  1. 支付宝小程序(2017-09-20)
  2. 头条小程序(2018-09-16)
  3. 百度小程序(2018-07)
  4. QQ小程序(2019-06)
    但生活中用的最多的还属微信小程序,微信小程序提供了一个简单、高效的应用开发框架和丰富的组件及API,帮助开发者在微信中开发具有原生 APP 体验的服务。

配置小程序

  1. 全局配置app.json中配置相当于vue中的路由
    直接在pages选项中写页面路径,即可创建相应的页面
{
  "pages": [
    "pages/kind/kind",
    "pages/home/home",
    "pages/cart/cart",
    "pages/user/user",
    "pages/details/details",
    "pages/map/map"
  ],
  "window": {
    "navigationBarBackgroundColor": "#f66",
    "navigationBarTextStyle": "white",
    "navigationBarTitleText": "乐购",
    "backgroundColor": "#efefef",
    "backgroundTextStyle": "dark",
    "backgroundColorTop": "#0f0",
    "onReachBottomDistance": 50
  },
  "tabBar": {
    "color": "#333",
    "selectedColor": "#f66",
    "backgroundColor": "#efefef",
    "borderStyle": "white",
    "list": [
      {
        "pagePath": "pages/home/home",
        "text": "首页",
        "iconPath": "resources/home.png",
        "selectedIconPath": "resources/home_active.png"
      },
      {
        "pagePath": "pages/kind/kind",
        "text": "分类",
        "iconPath": "resources/kind.png",
        "selectedIconPath": "resources/kind_active.png"
      },
      {
        "pagePath": "pages/cart/cart",
        "text": "购物车",
        "iconPath": "resources/cart.png",
        "selectedIconPath": "resources/cart_active.png"
      },
      {
        "pagePath": "pages/user/user",
        "text": "我的",
        "iconPath": "resources/user.png",
        "selectedIconPath": "resources/user_active.png"
      }
    ]
  },
  "networkTimeout": {
    "request": 6000,
    "connectSocket": 6000,
    "uploadFile": 6000,
    "downloadFile": 6000
  },
  "permission": {
    "scope.userLocation": {
      "desc": "允许定位你的地理位置"
    }
  },
  "navigateToMiniProgramAppIdList": [
    "wx5dfe0dd623d5ae6b"
  ],
  "style": "v2",
  "sitemapLocation": "sitemap.json",
  "debug": false
}

在这里的sitemap.json为文件,主要用于配置小程序及其页面是否允许被微信索引,文件内容为一个 JSON 对象,如果没有 sitemap.json ,则默认为所有页面都允许被索引。

  1. 页面配置pages文件中子文件配置各个页面
    配置局部样式
{
  "navigationBarBackgroundColor": "#ff7001",
  "navigationBarTextStyle": "white",
  "navigationBarTitleText": "乐购-首页",
  "backgroundColorTop": "#efefef",
  "backgroundTextStyle": "light",
  "enablePullDownRefresh": true,
  "onReachBottomDistance": 50,
  "disableScroll": false,
  "usingComponents": {
    "prolist": "/components/prolist/prolist"//子组件引入路径
  }
}

这里的js文件主要用于处理页面的初始数据、生命周期回调、事件处理函数等。

Page({

  /**
   * 页面的初始数据
   * data 是页面第一次渲染使用的初始数据。
   * 页面加载时,data 将会以JSON字符串的形式由逻辑层传至渲染层,因此data中的数据必须是可以转成JSON的类型:字符串,数字,布尔值,对象,数组。
   * 渲染层可以通过 WXML 对数据进行绑定。
   */
  data: {

  },

  /**
   * 生命周期函数--监听页面加载
   * 页面加载时触发。一个页面只会调用一次,可以在 onLoad 的参数中获取打开当前页面路径中的参数。
   */
  onLoad: function (options) {
    // options为打开当前页面路径中的参数
  },

  /**
   * 生命周期函数--监听页面初次渲染完成
   * 页面初次渲染完成时触发。一个页面只会调用一次,代表页面已经准备妥当,可以和视图层进行交互
   */
  onReady: function () {

  },

  /**
   * 生命周期函数--监听页面显示
   *  页面显示/切入前台时触发
   */
  onShow: function () {

  },

  /**
   * 生命周期函数--监听页面隐藏
   * 页面隐藏/切入后台时触发
   */
  onHide: function () {

  },

  /**
   * 生命周期函数--监听页面卸载
   * 页面卸载时触发。
   */
  onUnload: function () {

  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   * 需要在app.json的window选项中或页面配置中开启enablePullDownRefresh。
   * 可以通过wx.startPullDownRefresh触发下拉刷新,调用后触发下拉刷新动画,效果与用户手动下拉刷新一致。
   * 当处理完数据刷新后,wx.stopPullDownRefresh可以停止当前页面的下拉刷新
   */
  onPullDownRefresh: function () {

  },

  /**
   * 页面上拉触底事件的处理函数
   * 可以在app.json的window选项中或页面配置中设置触发距离onReachBottomDistance。
   * 在触发距离内滑动期间,本事件只会被触发一次
   */
  onReachBottom: function () {

  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage: function (res) {
    if (res.from === 'button') {
      // 来自页面内转发按钮
      console.log(res.target)
    }
    // 自定义图片路径,可以是本地文件路径、代码包文件路径或者网络图片路径。支持PNG及JPG。显示图片长宽比是 5:4。
    return {
      title: '自定义转发标题',
      path: '/page/user?id=123',
      imageUrl: ''
    }
  },

  /**
   * 监听用户滑动页面事件
   */
  onPageScroll: function () {

  }
  /**
   * 自定义函数
   */
})

如果在全局app.js文件中设置一些全局数据,如:获取设备的基本信息

//app.js
App({
  onLaunch: function () {
    //获取设备的基本信息
    this.getDeviceInfoFn()
  },
  getDeviceInfoFn() {
    wx.getSystemInfo({
      success: (res) => {
        console.log(res)
        // 修改全局变量数据
        this.globalData.deviceinfo = res
      }
    })
  },
  globalData: {
    userInfo: null,
    deviceinfo:null//设置一个全局设备信息变量接受
  },

在局部js文件中需 const app = getApp(); console.log(app)
//解构赋值
const {globalData:{deviceinfo:{screenWidth,screenHeight}}} = app
来获取全局js中的数据

发送异步请求

建议使用es6的模块化方法,api中提供的是基于commonjs规范的exports以及require语法
定义工具模块 utils/index.js

// 接口地址 
const baseUrl = '接口地址'
//暴露全局方法
export function request(options){
  //解构赋值
  const {url,data}=options;
  wx.showLoading({
    title: '加载中',
  })
  // 回调函数、promise、generator + yield、async+await
  return new Promise((resolve, reject) => {
    wx.request({
      url: baseUrl + url,
      data: data || {},
      success: (res) => {
        // 异步操作成功调用resolve
        resolve(res)
      },
      fail: (err) => {
        // 异步操作失败调用reject
        reject(err)
      },
      complete: () => {
        // 成功失败都取消刷新
        wx.hideLoading()
      }
    })
  })
}

小程序中的常用组件

  1. 首页轮播图数据的请求以及渲染
<swiper
  indicator-dots="{{true}}" autoplay="{{true}}" circular="{{true}}" 
  duration="{{500}}">
  <block wx:for="{{bannerlist}}" wx:key="index">
    <swiper-item >
      <image src="{{'http://.....kuboy.top' + item}}"></image>
    </swiper-item>
  </block>
</swiper>
<prolist></prolist>//子组件调用

indicator-dots:是否显示面板指示点 autoplay:是否自动切换 circular:是否采用衔接滑动
duration:滑动动画时长这些都是常用的方法,具体其它方法可以参考文档

  1. map
<map 
  class="map" 
  longitude="{{longitude}}" 
  latitude="{{latitude}}"
  scale="15"
  markers="{{markers}}"
  controls="{{controls}}"
  bindcontroltap="controlshandler"//自定义点击事件
  ></map>
  //获取经纬度
  data: {
    longitude: '118.8205719000', // 经度
    latitude: "31.8839713500", // 维度
    markers: [{
      id: 1, //marker 点击事件回调会返回此 id
      longitude: '118.8205719000', // 经度
      latitude: "31.8839713500", // 维度
      title: '宝塔镇河妖', // 点击marker提示信息callout出现时忽略
      iconPath: '/resources/zuobiao.png', 
      width: 40,
      height: 40,
      callout: {
        content: '宝塔镇河妖',
        color: '#f66',
        fontSize: 14,
        borderRadius: 5,
        borderWidth: 3,
        bgColor: 'white',
        padding: 10,
        display: 'BYCLICK', //  'BYCLICK': 点击显示; 'ALWAYS': 常显
        textAlign: 'center'
      }
    }],
    controls: [{//controls为地图上显示控件,控件不随着地图移动
      id: 1,
      position: { // left,top
        left: screenWidth-70,  // 获取设备的宽度以及高度 ---  获取设备的基本信息
        top: screenHeight - 150,
        width: 40,
        height: 40
      },
      iconPath: '/resources/xingzhuang.png',
      clickable: true // 控制默认不可以点击
    }]
  },
  //自定义点击事件
  controlshandler(event) {
    console.log(event)
    //判断是否点击的定位按钮的id号
    if (event.controlId === 1) {
      //调用获取当前经纬度
      wx.getLocation({
        success: (res) => {
          console.log(res)
          //解构赋值
          const {longitude,latitude} = res
          this.setData({
            longitude, latitude,
            markers: [{
              id: 1, //marker 点击事件回调会返回此 id
              longitude: longitude, // 经度
              latitude: latitude, // 维度
              title: '宝塔镇河妖', // 点击marker提示信息callout出现时忽略
              iconPath: '/resources/zuobiao.png', 
              width: 40,
              height: 40,
              callout: {
                content: '宝塔镇河妖',
                color: '#f66',
                fontSize: 14,
                borderRadius: 5,
                borderWidth: 3,
                bgColor: 'white',
                padding: 10,
                display: 'BYCLICK', //  'BYCLICK': 点击显示; 'ALWAYS': 常显
                textAlign: 'center'
              }
            }]
          })
        }
      })
    }
  },

map方法比较多,具体详情可以参考相关文档
小程序的定位相关api

小程序中的组件通信

逆战中为了美化wxml页面布局减少父组件的js代码量,一般都是传递给子组件

//在js文件中获取数据
 data: {
    bannerlist:[],//异步请求获取的数据
    reachbottom:false
  },
//在wxml中调用组件中传值
<prolist prolist="{{prolist}}"/>
//在子组件中接受
properties: {
    prolist: Array//接受的数据类型
  },

以上只是接触小程序以后的一部分理解,还有好多好多,随着小程序的越来越成熟也诞生了别的框架可以处理页面需求如:Taro、uni-app等
生活是一张洁白的画纸,我们每个人都是手握各色画笔的画师,生活是一杯香醇的美酒,我们每个人都是一名出色的品酒师,生活是一块神奇的土地,我们每个人都是辛勤耕耘的劳动者,生活更是一条看不见尽头的长路,我们每个人都是生活的远足者。

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

对微信小程序的理解 的相关文章

随机推荐

  • 【秋招必备】JVM性能调优面试题(2022最新版)

    作为 Java 的从业者 在找工作的时候 一定会被问及关于 JVM 相关的知识 JVM 知识的掌握程度 在很多面试官眼里是候选人技术深度的一个重要评判标准 小编分享的这份Java后端开发面试总结包含了JavaOOP Java集合容器 Jav
  • mybatis plus中编写sql语句

    sql 语句是写在对应的xml文件中 首先要解决maven默认不加载xml文件的问题 1 首先要写入相关配置文件 在pom 导入下面内容
  • 网工学习笔记(四):办公网络布线

    办公网络布线 1 综合布线系统主要由哪几个子系统组成 工作间子系统 水平子系统 设备间子系统 垂直间子系统 管理间子系统 建筑群子系统 2 工作区子系统又称为什么 服务区子系统 3 水平子系统连接哪两个子系统 工作间子系统 管理间子系统 4
  • 通讯录进阶——动态通讯录

    通讯录进阶 动态通讯录 大体思路 改编通讯录的结构体 初始化通讯录的修改 增加函数的修改 退出通讯录函数的实现 代码一览图 Contact c main c Contact h 大体思路 今天我们将来实现一下基于我之前博客里的通讯录的进阶
  • Linux 练习十三 (Linux网络编程epoll + 源码练习)

    文章目录 4 EPOLL多路复用 4 1 epoll介绍 4 2 epoll接口的使用 4 3 示例 使用epoll实现即时聊天 4 4 epoll和select的优缺点 使用环境 Ubuntu18 04 使用工具 VMWare works
  • QT的学习2(2020.06.06)

    QT模块 QT基础 模块主要分为 1 QT COre 提供核心的非 GUI 功能 所有模块都需要这个模块 这个模块的类包括了动画框架 定时器 各个容器类 时间日期类 事件 IO JSON 插件机制 智能指针 图形 矩形 路径等 线程 XML
  • 4-数据结构-线性表-顺序表的查找和修改以及总结

    问题 顺序表的查找以及修改 跟数组一样 直接进行遍历查找 以及直接找到数组中某个值 思路 查找 目的时找到对应值的数组下标 输入所需数组 所需查找的值 对顺序表中数组进行遍历 若找到 则返回下标即可 输入你想删除的值 然后实现删除操作 流程
  • 从键盘任意键入一个正整数x,编程计算x的每一位数字相加之和(使用递归方法)。例如输入123,输出结果:6

    这个题对我这个小白来说还挺难的 僵持了好长时间 才想到这个方法来实现 第一步 当然是要从键盘输入一正整数数据啦 第二步 由于考虑到要一直除10和模10 所以我想到的办法是递归 这就要创建一个自己的函数 说起递归这两个方面超级重要 考虑到这个
  • Centos忘记root密码

    我们在维护Centos系统中 一旦忘记root密码 就无法进入系统 这个时候我们又不希望重新安装系统 因为Centos部署着公司运行的正常的业务程序 可以通过以下步骤重新设置root密码 步骤 1 重启系统 然后再五秒之内按下任意键 进入下
  • python退出命令行

    三种方式 1 exit 回车 2 quit 回车 3 control z 回车 注意上面exit和quit后面都有括号
  • 浅析vue3中的声明响应式数据 ref 和 reactive

    在Vue2中响应式数据是通过defineProperty来实现的 而在Vue3响应式数据是通过ES6的Proxy来实现的 Vue3中实现响应式数据的方法是ref和reactive defineProperty只能单一地监听已有属性的修改或者
  • 求取圆形区域内的平均灰度值

    include
  • LaTeX学习:Texlive 2019和TeX studio的安装及使用

    文章目录 1 LaTex介绍 2 Texlive2019的下载和安装 1 下载 2 安装 3 TeXstudio的安装以及简单使用 1 设置中文界面 2 添加行号 3 设置编译器与编码 4 第一个简单程序 4 扩展 1 LaTex介绍 La
  • C51单片机开发程序报错 main.c (11) : error C267 : ‘Nieix‘ : requires ANSI-style prototype

    问题 C51单片机开发程序报错 main c 11 error C267 Nieix requires ANSI style prototype 详细问题 解决方案一 在主函数中调用处修改函数名为函数定义声明处 h文件中 以及函数实现处 c
  • 嵌入式(网络编程扩展)

    一 域名解析 把www XXX XXX COM转换成IP地址 返回值 将域名转化成IP 只适用于IPV4 1 加 include netdb h 2 结构体变量 struct hostent hs NULL 3 4 二 网络属性设置 选项
  • DELL R730安装xenserver 6.2,raid卡驱动问题

    使用dell 730 安装xenserver6 2 提示this host does not appears to have any disk 不能发现硬盘 解决方法 定位原始是xenserver安装包中缺少raid卡驱动 参考 http
  • android o android8.0 startforegroundservice startforegroundservice() did not then call service.star

    解决context startforegroundservice did not then call service startforeground 原因 Android 8 0 系统不允许后台应用创建后台服务 故只能使用Context s
  • 某些科技外企结束在中国市场直接运营,你如何看?

    在新的竞争态势下 向左走 还是向右走 全球存储观察 热点关注 前些天 我发了一篇文章 你如何看LinkedIn 领英职场 将于8月9日起停止中国服务 引发了业内朋友的热议 大家一致认为 科技外企在中国市场的发展何去何从在于其自身定位与全球发
  • 关于Bean的六种作用域

    文章目录 前言 一 singleton 单例作用域 二 prototype 原型作用域 多例作用域 三 request 请求作用域 四 session 会话作用域 五 application 全局作用域 六 websocket HTTP W
  • 对微信小程序的理解

    前言 相信很多人对微信小程序都比较情有独钟 首先大家应该知道小程序的优点 它实现了应用 触手可及 的梦想 用户扫一扫或者搜一下即可打开应用 也体现了 用完即走 的理念 用户不用关心是否安装太多应用的问题 应用将无处不在 随时可用 但又无需安