《微信小程序实战(1)· 开篇示例 》

news2024/9/24 17:19:39

📢 大家好,我是 【战神刘玉栋】,有10多年的研发经验,致力于前后端技术栈的知识沉淀和传播。 💗

🌻 CSDN入驻不久,希望大家多多支持,后续会继续提升文章质量,绝不滥竽充数,欢迎多多交流。👍

文章目录

    • 写在前面的话
    • 开篇示例
    • 讲解大纲
    • 页面开发
    • 远程调用
    • 总结陈词

写在前面的话

近期由于博主刚帮朋友完成一个地图导航类的微信小程序,趁这股热乎劲还没褪去,想着把微信小程序的相关内容整理一个专栏,统一分享一下。

关于微信小程序,大家想必也都不陌生了,毕竟推出来好几年了,这边不会去介绍小程序的基础用法,毕竟官网上介绍的足够详细了。

本专栏的主要目的就是分享一下微信小程序在实战开发过程中,常用的操作讲解和踩坑说明,希望可以帮助到大家。

好了,废话不多说,让我们开始吧!

参考:微信小程序官网文档


开篇示例

由于本系列文档要介绍小程序实战的内容,那不得先贴一下待讲解对象的相关截图,否则岂不是耍流氓?

这里要介绍的微信小程序是一款地图类小程序,是某水务集团为方便内部员工进行日常工作登记而研发的,需求内容包含但不限于打标记、绘制足迹、选点画线、海报推广、以及若干典型得列表、详情、表单等页面,可以说麻雀虽小五脏俱全,以这个为示例展开介绍,再合适不过了。

先上若干截图:

讲解大纲

针对这一示例小程序,要展开介绍的课题可能如下,有其他想了解的欢迎评论区留言。

  • 重要概念与小程序模板
  • 页面开发与远程调用
  • 小程序码生成与海报绘制
  • 昵称与电话授权
  • 地图相关操作合集
  • 各类型页面的应对
  • 小程序组件开发篇
  • 小程序中的公用&封装
  • 小程序开发之实用技巧
  • 未完待续,虚位以待

本篇文章也不能就介绍一个大纲,啥也不说吧,那岂不是空手套白狼。

篇幅所限,先介绍一个页面开发与远程调用课题。

页面开发

基础构成

微信小程序的每个页面通常由四个文件组成,分别是:

.js 文件:这个文件包含了页面的逻辑代码,主要用于处理用户的交互、数据请求和页面的生命周期函数等。

.json 文件:这个文件用于配置页面的窗口表现和一些特定的设置,比如导航栏的标题、是否启用下拉刷新等。

.wxml 文件:这个文件是页面的结构文件,类似于 HTML,定义了页面的布局和元素。

.wxss 文件:这个文件是页面的样式文件,类似于 CSS,用于设置页面元素的样式和布局。

这四个文件的分离使得小程序的结构更加清晰,便于开发和维护。开发者可以独立地修改页面的逻辑、样式和结构,提高了代码的可读性和可维护性。

再啰嗦一句,基础知识烦请参考:微信小程序官网文档

写法对比 Vue

不管前后端程序猿,或多或少都接触过 Vue,有了 Vue 的基础,微信小程序基本用法也就掌握了,两者用法十分相似。

从组成上比对,Vue 是在同一个文件里包含了布局、逻辑、样式三个部分,而小程序是拆开,各有优劣。

从编码上看,日常开发Vue具备的写法,小程序也基本都覆盖到了,特殊用法略有差别。

页面逻辑 .js

核心用法包含生命周期、自定义方法、自定义数据,细节部分不展开,直接用一个模板示例说明。

该模板可以用于创建任意新页面,如果开发团队有专门前端人员,可以让他创建页面的时候复制此模板。

这样您的团队,也是前后端开发搭配协作,那这种做法节省很多沟通时间,代码也较为清晰。

/**
 * 模板页
 * author:战神刘玉栋
 */
let app = getApp();  //获取到小程序全局唯一的 App 实例
let ace = require("../../utils/ace.js"); //获取自定义封装的工具类

Page({

  /**
   * 页面的初始数据
   */
  data: {
    userObj: {}, //用户信息
  },

  /**
   * 非页面渲染数据
   */
  otherData: {
    author: '战神刘玉栋',
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad: function (options) {

    let that = this;

    // 获取用户信息,插入到页面的数据中
    ace.getUserInfo(function (data) {     
      that.setData({
        userObj: data
      }, function () {

        // 触发初始化页面逻辑
        that.initHandle();
      })
    });
  },

  /**
   * 初始化页面逻辑
   */
  initHandle: function () {

    let that = this;
  },
})

远程调用

正所谓,缺失远程调用能力的前端,是没有灵魂的前端(忘记哪里听来的杂谈了)。

就像 Vue 中使用Axios调用后端接口获取数据那样,微信小程序有自己调用接口的wx.request

又像 Vue 中,通常会创建一个request.js文件,对Axios进行二次封装,编写前置和后置拦截器,对入参和出参进行相应处理。

没错了,小程序的远程调用的最佳实践也是需要您封装一二,否则直接使用wx.request,仿佛代码是在裸奔。

您需要把常用方法封装到一个工具JS,按需调用,例如下方这样:

/**
 * 封装网络请求
 */
function sendHttp(uri, data, method, successCallback, failCallback, flag) {

    var that = this;

    if (flag != 'no') {
        that.showLoading();
    }

    wx.request({
        url: app.globalData.urlApi + uri, data: data, method: method, header: {
            'Content-Type': 'application/x-www-form-urlencoded'
        }, success: function (res) {
            if (flag !== 'no') {
                that.hideLoading();
            }
            if (res.statusCode === 200) {
                let data = res.data;
                if (data && data.success) {
                    successCallback(data.data);
                } else {
                    that.msg(data.message || '系统异常');
                    console.log(data.error)
                    typeof failCallback == "function" && failCallback(data)
                }
            }
        }, fail: function (msg) {
            that.hideLoading();
            that.toastError('稍后再试~');
            console.log('reqest error', msg)
        },
    })
}

/**
 * 发送GET请求
 */
function sendGet(url, callBack, flag) {
    if (!app) {
        app = getApp();
    }
    if (app.globalData.appId && url.indexOf('appId') == -1) {
        if (url.indexOf('?') == -1) {
            url += '?appId=' + app.globalData.appId
        } else {
            url += '&appId=' + app.globalData.appId
        }
    }
    this.sendHttp(url, {}, 'GET', callBack, null, flag);
}

/**
 * 发送POST请求
 */
function sendPost(url, data, callBack, failCallback) {
    if (!app) {
        app = getApp();
    }
    if (app.globalData.appId) {
        data.appId = app.globalData.appId
    }
    this.sendHttp(url, data, 'POST', callBack, failCallback);
}

总结陈词

此篇文章是《微信小程序实战》系列的第一篇,后续该专栏会继续分享小程序实战中运用的技能,希望可以帮助到大家。如果有感兴趣的内容,可以私信沟通交流。

💗 后续会逐步分享企业实际开发中的实战经验,有需要交流的可以联系博主。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2138439.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Vue3 响应式工具函数isRef()、unref()、isReactive()、isReadonly()、isProxy()

isRef() isRef():检查某个值是否为 ref。 isRef函数接收一个参数,即要判断的值。如果该参数是由ref创建的响应式对象,则返回true;否则,返回false。 import { ref, isRef } from vue const normalValue 这是一个普通…

【网络安全的神秘世界】ssrf服务端请求伪造

🌝博客主页:泥菩萨 💖专栏:Linux探索之旅 | 网络安全的神秘世界 | 专接本 | 每天学会一个渗透测试工具 ssrf 一、SSRF原理及漏洞演示 1.1 漏洞简介 SSRF(Server-Side Request Forgery:服务端请求伪造&am…

kafka之protobuf

Protobuf 的 .proto 文件是一种描述消息结构的定义文件,使用这种文件可以定义数据结构(消息),然后生成对应语言的类或代码用于序列化和反序列化数据。生成 .proto 文件涉及到编写 .proto 文件定义,然后通过 protoc 编译…

Acrobat XI 安装教程

软件介绍 Adobe Acrobat 是由Adobe公司开发的一款PDF(Portable Document Format,便携式文档格式)编辑软件。借助它,可以以PDF格式制作和保存文档,以便于浏览和打印,同时还可以使用一些高级工具来创建、编辑…

Linux PTP 测量实操 (IEEE 1588)

测量 IEEE 1588 需要使用 linuxptp 这个工程, 官网是 https://linuxptp.sourceforge.net/ 获取代码可以通过git git clone git://git.code.sf.net/p/linuxptp/code linuxptp 如果是当前环境本地编译的话, 直接在下载好的代码路径make就可以. 如果需要在开发板上面使用的话…

通信工程学习:什么是接入网(AN)中的TF传送功能

接入网(AN)中的TF传送功能 在通信工程中,TF(Transfer Function)传送功能是指为接入网(AN)不同位置之间提供通道和传输介质,以实现数据的有效传输。以下是关于TF传送功能的详细解释&a…

水滴式粉碎机:辣椒粉碎轻松搞定

在食品加工行业中,辣椒作为一种重要的调味品,其加工方式直接影响到产品的口感。水滴式粉碎机的粉碎方式不仅保留了辣椒原有的色泽、香味和营养成分,还减少了加工过程中的热损失和氧化反应,确保了辣椒粉的品质。 精细度与均匀度&am…

Kafka 消息丢失如何处理?

今天给大家分享一个在面试中经常遇到的问题:Kafka 消息丢失该如何处理? 这个问题啊,看似简单,其实里面藏着很多“套路”。 来,咱们先讲一个面试的“真实”案例。 面试官问:“Kafka 消息丢失如何处理&#x…

基于SSM+Vue+MySQL的在线医疗服务系统

系统展示 用户前台界面 管理员后台界面 系统背景 随着医疗信息化的快速发展和患者对便捷医疗服务需求的日益增长,开发一个高效、可靠的在线医疗服务系统显得尤为重要。基于SSM(SpringSpring MVCMyBatis)框架、前端采用Vue.js、后端连接MySQL数…

CrossOver24.0.5破解版免费下载和永久激活图文教程,苹果电脑怎么玩《黑神话:悟空》

CrossOver24可以玩《黑神话:悟空》么?答案是可以的。 1、首先我们需要下载CrossOver24软件。 CrossOver24安装包夸克网盘链接:https://pan.quark.cn/s/35e64d746778 2、下载完成后,我们双击CrossOver.pkg开始安装,然…

LeetCode[简单] 141.环形链表

给你一个链表的头节点 head ,判断链表中是否有环。 如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置(…

C++初阶学习——探索STL奥秘——模拟实现list类

1、基本框架 list 由三个类构建而成: 节点类:每个节点必须的三部分(指向前一个节点的指针、指向后一个节点的指针、当前节点存储的数据) 迭代器类:此时的迭代器为双向迭代器,比较特殊,需要对其进行封装,如 it并非使迭代器单纯向后移动&…

QT添加图标标题和打包项目

QT项目打包 项目的标题和图标标题项目图标exe图标 可执行文件——生成exeexe运行报错“找不到qt6gui.dll”等 相关库文件——生成zip安装包打包程序——生成exe安装包 项目的标题和图标 项目打包要好看点,得有个好点的标题和图标,这次打包的项目是我上一…

excel如何快速选中某个数字或者某串数字

鼠标光标放在某个数字或者某串数字的末尾,进行双击鼠标左键即可 (就会选中当前鼠标光标前相邻的所有数字):

【Node.js】RabbitMQ 延时消息

概述 在 RabbitMQ 中实现延迟消息通常需要借助插件(如 RabbitMQ 延迟队列插件),因为 RabbitMQ 本身不原生支持延迟消息。 延迟消息的一个典型场景是,当消息发布到队列后,等待一段时间再由消费者消费。这可以通过配置…

【拦截导弹】

​ 题目 ​​ 题解 题解:1010. 拦截导弹(dp与贪心) - AcWing 我谈几点: 第一,由此复习了upper_bound和lower_bound函数 第二,由此学习了贪心方式求“最多分割不严格递减子序列的数目”和“最长不严格递…

算法参数对拥塞控制的影响

来看看参数对公平收敛的影响。仅假象一下就知道应该是个加权公平,但事实如何,还是要具体看一下。 首先看 aimd,标准的 reno 算法是每 round 之后 cwnd 加 1,但如果有些流加 1,有些流加 2,会如何&#xff1…

踩坑【已解决】:使用maven打印结果是控制台输出中文乱码

报错原图: 解决方案: 1、修改maven->runner中的配置添加如下信息: -Dfile.encodingUTF-8 2、检查编码的配置信息: 3、检查窗口右下角的配置信息: 解决结果:

SEGGERS实时系统embOS推出Linux端模拟器

SEGGER 发布了两个新的 embOS 仿真模拟器:embOS Sim Linux 和 embOS-MPU Sim Linux。 通过模拟 Linux 主机系统上的硬件,取代物理硬件,为开发人员提供了一种无缝的方式来构建原型和测试应用程序。 embOS Sim Linux 端口支持 32 位和 64 位系…

【在Linux世界中追寻伟大的One Piece】网络命令|验证UDP

目录 1 -> Ping命令 2 -> Netstat命令 3 -> Pidof命令 4 -> 验证UDP-Windows作为client访问Linux 4.1 -> UDP client样例 1 -> Ping命令 Ping命令是一种网络诊断工具,它使用ICMP(Internet Control Message Protocol,互联网控制消…