从零构建一个微信小程序

一、微信小程序介绍


  1. 微信小程序,简称小程序,英文名:Mini Program,是一种不需要下载安装即可使用的应用,它实现了应用“触手可及”的梦想,用户扫一扫或搜一下即可打开应用。

1.1 为什么是微信小程序?

  1. 微信有海量用户,而且粘性很高,在微信里开发产品更容易触达用户。
  2. 推广 app 或公众号的成本太高。
  3. 开发适配成本低。
  4. 容易小规模试错,然后快速迭代。
  5. 跨平台。

1.2 还有其他的小程序 不容忽视

  1. 支付宝小程序
  2. 百度小程序
  3. QQ 小程序
  4. 今日头条 + 抖音小程序

1.3 优秀的第三方小程序

  1. 拼多多
  2. 滴滴出行
  3. 欢乐斗地主
  4. 智行火车票
  5. 唯品会

二、环境准备


开发小程序之前,必须要准备好相应的环境。

2.1 注册账号

建议使用全新的邮箱,没有注册过其他小程序或者公众号的。

访问注册页面,耐心完成注册即可。

2.2 获取 APPID

  1. 由于后期调用微信小程序的接口等功能,需要索取开发者的小程序中的 APPID ,所以在注册成功后,可登录获取一下 APPID 。
  2. 登录,成功后复制 APPID 。

2.3 开发工具

  1. 微信开发者工具
  2. 微信小程序自带开发者工具,集开发预览调试发布于一身的完整环境。但是由于编码的体验不算好,因此建议使用vs code + 微信小程序编辑工具来实现编码。
    • vs code 负责敲代码,微信编辑工具负责预览。
    • 微信编辑工具负责预览。

三、第一个微信小程序


3.1 打开微信开发者工具

  1. 第一次登陆需要扫码。

四、小程序目录结构


  1. 小程序框架的目标是通过尽可能简单、搞笑的方式让开发者可以在微信中开发具有原生 APP 体验的服务。
  2. 小程序框架提供了自己的视图层描述语言 WXML 和 WXSS ,以及 JavaScript ,并在视图层与逻辑层间提供了数据传输和事件系统,让开发者能够专注于数据与逻辑。

4.1 小程序文件结构和传统 Web 对比

结构传统 Web微信小程序
结构HTMLWXML
样式CSSWXSS
逻辑JavaScriptJavaScript
配置JSON
  • 通过以上对比得出,传统 Web是三层结构。而微信小程序是四层结构,多了一层配置.json

4.2 基本的项目目录

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fwpO6B5S-1642639773070)(D:\前端笔记\image\小程序项目结构.png)]

五、小程序配置文件


  1. 一个小程序应用程序会包括最基本的两种配置文件。一种是全局的app.josn和页面自己的page.json

注意:配置文件中不能出现注释。

5.1 全局配置 app.json

  1. app.json 是当前小程序的全局配置,包括了小程序的所有页面路径、界面表现、网络超时时间、底部 Tab 等。普通快速启动项目里边的 app.json 配置。

    {
      // 页面
      "pages":[
        "pages/index/index",
        "pages/logs/logs"
      ],
      // 全局默认窗口表现
      "window":{
        "backgroundTextStyle":"light",
        "navigationBarBackgroundColor": "#FFF",
        "navigationBarTitleText": "Weixin",
        "navigationBarTextStyle":"black"
      },
      "style": "v2",
      "sitemapLocation": "sitemap.json"
    }
    
  2. 字段的含义:

    • pages 字段 —— 用于描述当前小程序所有页面路径,这是为了让微信客户知道当前小程序页面定义在哪个目录。
    • window 字段 —— 定义小程序所有页面的顶部背景颜色,文字颜色定义等。
    • 完整的配置信息请参考app.json
5.1.1 tabbar

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IcFIumsE-1642639773070)(D:\前端笔记\image\tabbar.png)]

5.2 页面配置 page.json

  1. page.json 是用来表示页面目录下到的 page.json 这类和小程序页面相关的配置。

  2. 开发者可以独立定义每个页面的一些属性,如顶部颜色、是否允许下拉等等。

  3. 页面的配置只能设置 app.json 中部分 window 配置项的内容,页面中配置项会覆盖 app.json 的 window 中相同的配置项。

    属性类型默认值描述
    navigationBarBackgroundColorHexColor#000000导航栏背景颜色
    navigationBarTextStyleStringwhite导航栏标题颜色,仅支持 black / white
    navigationBarTitleTextString导航栏标题文字内容
    backgroundColorHexColor#ffffff窗口的背景色
    backgroundTextStyleStringdark下拉 loading 的样式,仅支持 dark / light
    enablePullDownRefreshBooleanfalse是否全局开启下拉刷新
    onReachBottomDistanceNumber50页面上拉触底事件触发时距
    disableScrollBooleanfalse

5.3 sitemap 配置 - 了解即可

小程序目录下的 sitemap.json 文件用于配置小程序及其页面是否允许被微信索引。

六、模板语法


WXML (WeiXin Markup Language) 是框架设计的一套标签语言,结合基础组件事件系统,可以构建出页面的逻辑。

6.1 数据绑定

6.1.1 普遍写法
<view>{{ message }}</view>

Page({
	data: {
		message: 'Hello MINA!'
	}
})
6.1.2 组件属性
<view>{{ message }}</view>
Page({
	data: {
		id: 0
	}
})
  • 使用 Boolean 类型充当属性
    • 字符串和花括号之间一定不要存在空格,否则会导致识别失败。

6.2 运算

6.2.1 三元运算
<view hidden="{{flag ? true : false}}">Hidden</view>
6.2.2 算数运算
<view>{{a + b}} + {{c}} + d</view>
Page({
	data: {
		a: 1,
		b: 2,
		c: 3,
	}
})
6.2.3 逻辑判断
<view wx:if="{{length > 5}}"></view>
6.2.4 字符串运算
<view>{{"hello" + name}}</view>

6.3 列表渲染

6.3.1 wx:for
  1. 项的变量名默认为 item wx:for-item 可以指定数组当前元素的变量名。

  2. 下标变量名默认为 index wx:for-index 可以指定数组当前下标的变量名。

  3. wx:key 用来提高数组渲染的性能。

  4. wx:key 绑定的值,有以下几种选择:

    • String 类型,表示循环项中的唯一属性。

      list:[{id:0,name:"炒饭"},{id:1,name:"炒面"}]
      
    • 保留字 this 它的意思是 item 本身,*this 代表的必须是唯一的字符串和数组。

      list[1,2,3,4,5]
      wx:key="*this"
      
  5. 只有一层循环的时候,wx:for-item=“item” 和 wx:for-index=“index” 可以省略。

6.3.2 block

渲染一个包含多字节的结构块 block 最终不会变成真正的 DOM 元素。

6.4 条件渲染

6.4.1 wx:if

在框架中,使用 wx:if=“{{condition}}” 来判断是否需要渲染该代码块。

<view wx:if="{{false}}">1</view>
<view wx:elif="{{true}}">2</view>
<view wx:else>3</view>
6.4.2 hidden
<view hidden="{{condition}}">True</view>
  • 类似 wx:if 。
  • 频繁切换用 hidden ,不常使用 wx:if 。
  • hidden 属性不要和样式 display 一起使用。

七、小程序事件的绑定


  1. 小程序绑定事件,通过 bind 关键字来实现。如 bindtap、bindinput、bindchange 等。
  2. 不同的组件支持不同的事件。

7.1 wxml

<input bindinput="handleInput" />

7.2 page

Page({
  // 绑定的事件
  handleInput: function(e) {
    console.log(e);
    console.log("值被改变了!")
  }
})

7.3 特别注意

  1. 绑定事件时不能带参数,不能带括号,以下为错误写法:

    <input bindinput="handleIput(100)" />
    
  2. 事件传值,通过标签自定义属性的方式和 value 。

八、样式 WXSS


  1. WXSS(Weixin Style Sheets)是一套样式语言,用于描述 WXML 的组件样式。
  2. 与 CSS 相比,WXSS 扩展的特性有:
    • 响应式长度:rpx 。
    • 样式导入。

8.1 尺寸单位

  1. rpx可以根据屏幕宽度进行自适应。规定屏幕宽度为 750rpx 。如在 iphone6 上,屏幕宽度为 375px ,共有 750 个物理像素,则 750rpx = 375px = 750物理像素,1rpx = 0.5px = 1物理像素。

    设备rpx 换算 px (屏幕宽度 / 750)px 换算 rpx (750 / 屏幕宽度)
    iphone51rpx = 0.42px1px = 2.34rpx
    iphone61rpx = 0.5px1px = 2rpx
    iphone6 Plus1rpx = 0.552px1px = 1.81rpx
    • 建议:开发微信小程序设计师可以用 iphone6 作为视觉稿的标准。
  2. 使用步骤:

    • 确定设计稿宽度 pageWidth 。

    • 确定比例 750rpx = pageWidth px ,因此 1px = 750rpx / pageWidth 。

    • 在 less 文件中,只要把设计稿中的 px => 750/pageWidth rpx 即可。

      /*
      	1. 利用一个属性 calc 属性(css 和 wxss 都支持的一个属性)。
      		* 750 和 rpx 中间不用加空格。
      		* 运算符的两边也不要加空格。
      
      */
      
      /* width: 200rpx; */
      height: 200px;
      font-size: 40rpx;
      background-color: aqua;
      width: calc(750rpx*100/375);
      

8.2 样式导入

  1. wxss 中直接就支持,样式导入功能。

  2. 也可以和 less 中的导入混用。

  3. 使用 @import 语句可以导入外联样式表,只支持相对路径

    /** common.wxss **/
    .small-p {
      padding: 5px;
    }
    
    
    /** app.wxss **/
    @import "common.wxss";
    .middle-p {
      padding: 15px;
    }
    

8.3 选择器

  1. 特别注意的是小程序**不支持通配符 * **,因此以下代码无效:

    * {
      margin: 0;
      padding: 0;
      box-sizing: border-box;
    }
    
  2. 目前支持的选择器有:

    选择器样例样例描述
    .class.intro选择所有拥有 class = “intro” 的组件
    #id#firstname选择拥有 id = “firstname” 的组件
    elementview选择所有 view 组件
    element,elementview,checkbox选择所有文档的 view 组件和所有的 checkbox 组件
    nth-child(n)view:nth-child(n)选择某一个索引的标签
    ::afterview:after在 view 组件后边插入内容
    ::beforview:before在 view 组件前边插入内容

8.4 小程序中使用 less

  1. 原生小程序不支持 less ,其他基于小程序的框架大体都支持,如 wepy 、mpvue 、taro 等。但是仅仅因为一个 less 功能,而去引入一个框架,肯定是不可取的。因此可以用以下方式来实现。

    • 编辑器是 vs code 。

    • 安装插件 easy less 。

    • 在 vs code 的设置中加入如下配置:

      "less.compile": {
        "outExt": ".wxss"
      }
      
    • 在要编写样式的地方,新建 less 文件,如 index.less 然后正常编辑即可。

九、常见组件


9.1 view

  1. 代替原来的 div 标签。

    <view hover-class="h-class">
    点击我试试
    </view>
    

9.2 text

  1. 文本标签。
  2. 只能嵌套 text 。
  3. 长按文字可以复制(只有该标签有这个功能)。
  4. 可以对空格 回车进行编码。
属性名类型默认值说明
selectableBooleanfalse文本是否可选
decodeBooleanfalse是否解码

9.3 image

  1. 图片标签,image 组件默认宽度 320px、高度 240px 。
  2. 支持懒加载。
属性名类型默认值说明
srcString图片资源地址
modeString‘scaleToFill’图片裁剪、缩放的模式
lazy-loadBooleanfalse图片懒加载

9.4 swiper

微信内置轮播图组件。

  1. 轮播图外层容器 swiper 。
  2. 每一个轮播项 swiper-item 。
  3. swiper 标签存在默认样式。
    • width:100%
    • height:150px
    • image 存在默认宽度和高度(1125 * 352 px)
    • swiper 高度无法实现由内容撑开。
  4. 先找出来原图的宽度和高度,等比例给 swiper 定宽度和高度。
    • swiper 宽度 / swiper 高度 = 原图的宽度 / 原图的高度
9.4.1 swiper
  • 滑块视图容器
属性名类型默认值说明
indicator-dotsBooleanfalse是否显示面板指示点
indicator-colorColorrgba(0, 0, 0, 3)指示点颜色
indicator-active-colorColor#000000当前选中的指示点颜色
autoplayBooleanfalse是否自动切换
intervalNumber5000自动切换间隔时间
circularBooleanfalses是否轮播

9.5 navigator

导航组件,类似超链接标签

​ 块级元素,默认会换行,可以直接加宽度和高度。

属性名类型默认值说明
targetStringself在哪个目标上发生跳转,默认当前小程序,可选值 self/miniProgram
urlString当前小程序的跳转链接
open-typeStringnavigate跳转方式

open-type 有效值

说明
navigate保留当前页面,跳转到应用内的某个页面,但是不能跳到 tabBer 页面
redirect关闭当前页面,跳转到应用内的某个页面,但是不允许跳到 tabBer 页面
switchTab跳转到 tabBer 页面,并关闭其他所有非 tabBer 页面
reLaunch关闭所有页面,打开到应用内的某个页面
navigateBack关闭所有页面,返回上一页面或多级页面。可通过 getCurrentPages() 获取当前的页面栈,决定需要返回几层
exit退出小程序,target=“miniProgram” 时生效

9.6 rich-text

富文本标签:

​ 可以将字符串解析成对应标签,类似 Vue 中的 v-html 功能。

通过 HTML String 渲染

<div class="div_class">
  <h1>
    Title
  </h1>
  <p class="p">
    Life is&nbsp;<i>like</i>&nbsp;abox of
    <b>&nbsp;chocolates</b>
  </p>
</div>

9.7 button

<button
   type="defult"
   size="{{defaultSize}}"
   loading="loading"
   plain="plain"
>
  default
</button>
属性类型默认值必填说明
sizestringdefault按钮的大小
typestringdefault按钮的样式类型
plainbooleanfalse按钮是否镂空,背景色透明
disabledbooleanfalse是否禁用
loadingbooleanfalse名称前是否带 loading 图标
form-typestring用于组件,点击分别会触发组件的 submit/reset 事件
open-typestring微信开放能力
size 的合法值
说明
default默认大小
mini小尺寸
type 的合法值
说明
primary绿色
default白色
warn红色
open-type 的合法值
说明
contact打开客服对话,如果用户在对话中点击消息卡片后返回小程序,可以从 bindcontact 回调中获得具体信息。
share触发用户转发,不能把小程序分享到朋友圈中的。
getPhoneNumber获取用户手机号,可以从 bindgetphonenumber 回调中获取到用户信息。
getUserInfo获取用户信息,可以从 binggetuserinfo 回调中获取到用户信息。
launchApp打开 APP ,可以通过 app-parameter 属性设定向 APP 传的参数。
openSetting打开授权设置页。
feedback打开“意见反馈”页面,用户可提交反馈内容并上传日志,开发者可以登录小程序管理后台后进入左侧菜单“客服反馈”页面获取到反馈内容。

9.8 icon

属性类型默认值必填说明
typestringicon 的类型,有效值:success,success_no_circle,info,warn,waiting,cancel
sizenumber/string23icon 的大小
colorstringicon 的颜色,同 css 的 color

9.9 radio

可以通过 color 属性来修改颜色。

  • 需要搭配 radio-group 一起使用。

9.10 checkbox

可以通过 color 属性来修改颜色。

  • 需要搭配 checkbox-group 一起使用。

十、自定义组件


类似 Vue 或者 React 中的自定义组件。

  • 小程序允许使用自定义组件的方式来构建页面。

10.1 创建自定义组件

类似于页面,一个自定义组件由 json wxml wxss js 4个文件组成。

  • 可以在微信开发者工具中快速创建组件的文件结构。
  1. 页面 .js 文件中,存放事件回调函数的时候,存放在 data 同层级下。
  2. 组件 .js 文件中,存放事件回调函数的时候,必须要存放在 methods 中。

10.2 父组件向子组件传递数据

  1. 父组件(页面)向子组件传递数据通过
    • 在子组件上进行接收
    • 把这个数据当成是 data 中的数据直接用即可。
<!-- 父组件wxml -->

<Tabs aaa="a123a"></Tabs>
// 子组件js

properties: {
  // 需要接收的数据的名称
  aaa: {
    // type:要接收的数据的类型
    type: String,
    // value: 默认值
    value: ''
  }
}
<!-- 子组件的wxml -->

<view>
	
</view>

10.3 slot 插槽

10.4 其他属性

10.5 定义段与实例方法

Component 构造器可用于定义组件,调用 Component 构造器时可以指定组件的属性、数据、方法等。

定义段类型是否必填描述
propertiesObject
Map
组件的对外属性,是属性名到属性设置的映射表。
dataObject组件的内部数据,和 properties 一同用于组件的模板渲染。
observersObject组件数据字段监听器,用于监听 properties 和 data 的变化。
methodsObject组件的方法,包括事件响应函数和任意的自定义方法。
createdFunction组件生命周期函数,在组件实例刚刚被创建时执行,注意此时不能调用 setData 。
attachedFunction组件生命周期函数,在组件实例进入页面节点树时执行。
readyFunction组件生命周期函数,在组件布局完成后执行。
movedFunction组件生命周期函数,在组件实例被移动到节点树另一个位置时执行。
detachedFunction组件生命周期函数,在组件实例被从页面节点树移除时执行。

10.6 组件-自定义组件传参

  1. 父组件通过属性的方式给子组件传递参数。
  2. 子组件通过事件的方式向父组件传递参数。

十一、小程序生命周期


  • 分为应用生命周期页面生命周期

11.1 应用生命周期

属性类型默认值必填说明
onLaunchfunction监听小程序初始化。(在应用第一次启动的时候,获取用户的个人信息)
onShowfunction监听小程序启动或切前台。(对应用的数据或者页面效果重置)
onHidefunction监听小程序切后台。(暂停或者清楚定时器)
onErrorfunction错误监听函数。(在应用发生代码报错的时候,收集用户的错误信息,通过异步请求,将错误的信息发送后台去)
onPageNotFoundfunction页面不存在监听函数。(如果页面不存在了,通过js的方式来重新跳转页面,重新跳到第二个首页)

11.2 页面生命周期

属性类型说明
dataObject页面的初始数据。
onLoadfunction生命周期回调—监听页面加载。(发送异步请求来初始化页面数据)
onShowfunction生命周期回调—监听页面显示。
onReadyfunction生命周期回调—监听页面初次渲染完成。
onHidefunction生命周期回调—监听页面隐藏。
onUnloadfunction生命周期回调—监听页面卸载。
onPullDownRefreshfunction监听用户下拉动作。(页面的数据或者效果重新刷新)
onReachBottomfunction页面上拉触底事件的处理函数。(上拉加载下一页数据)
onShareAppMessagefunction用户点击右上角转发。
onPageScrollfunction页面滚动触发事件的处理函数。
onResizefunction页面尺寸改变时触发。
onTabltemTapfunction当前是 Tab 页时,点击 Tab 时触发。
  • 1
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
目录: 第1章 微信生态 1.1 微信:是一个生活方式 1 1.2 微信公众平台 6 1.2.1 公众平台简介 6 1.2.2 服务号和订阅号 7 1.3 企业号 8 1.4 小程序 8 1.5 微信开放平台 9 1.6 微信支付 10 1.7 表情开放平台 12 1.8 微信广告 12 1.9 小结 13 第2章 开发环境及技术介绍 2.1 集成软件包介绍 14 2.2 XAMPP的安装与配置 15 2.3 PhpStorm的安装及配置 20 2.4 相关技术介绍 23 2.4.1 HTTP 23 2.4.2 HTML5 25 2.5 小结 26 第3章 开发前的准备 3.1 开发概述 27 3.1.1 OpenID 27 3.1.2 公众号使用场景 28 3.2 公众号消息会话流程 30 3.3 接入指南 31 3.4 接口权限及调用频率 33 3.5 微信网页开发样式库 35 3.6 小结 37 第4章 常用调试方法及工具 4.1 微信测试号 38 4.2 接口在线调试 41 4.3 微信Web开发者工具 42 4.3.1 微信网页授权调试 43 4.3.2 JS-SDK权限校验 45 4.3.3 网页远程调试 45 4.4 前端调试工具 46 4.4.1 谷歌浏览器开发者工具 48 4.5 移动端抓包与调试 50 4.5.1 Charles抓包工具 55 4.6 小结 56 第5章 基于CodeIgniter的微信公众平台开发框架 5.1 CodeIgniter简介 57 5.2 工程代码改造 59 5.3 微信公众号开发配置 60 5.4 小结 63 第6章 微信网页开发 6.1 微信网页授权原理 64 6.1.1 网页授权注意事项 65 6.1.2 网页授权流程 66 6.2 微信网页授权实例 67 6.3 微信网页多域名授权 74 6.3.1 原理分析 74 6.3.2 代码实现 76 6.4 微信JS-SDK 78 6.4.1 接入准备 79 6.4.2 JS-SDK接口实例 80 6.5 小结 85 第7章 微信支付 7.1 微信支付接入方式 86 7.2 微信支付准备工作 88 7.3 微信支付实践 89 7.3.1 示例代码解析 90 7.3.2 支付示例 91 7.3.3 支付结果通知 96 7.4 聚合支付 99 7.4.1 聚合支付接入示例 101 7.5 小结 105 第8章 微信登录 8.1 微信开放平台 107 8.1.1 UnionID机制 108 8.2 微信自动登录 109 8.2.1 数据结构设计 110 8.2.2 代码实现 112 8.2.3 使用UnionID登录 117 8.2.4 如何应用到现有站点 118 8.3 小结 120 第9章 微信小程序 9.1 小程序简介 121 9.2 开发环境及框架 122 9.2.1 开发配置 125 9.2.2 HTTPS配置 126 9.3.1 iOS/Android开发者 129 9.3 如何着手开发小程序 129 9.4 页面生命周期 130 9.3.2 前端开发者 130 9.3.3 后端开发者 130 9.5 小程序组件和API 134 9.6 小程序登录 134 9.7 小程序微信支付 140 9.8 小结 145 第10章 案例:第一个echo server程序 10.1 接入开发者模式 146 10.2 消息响应 147 10.2.1 公众号会话保存Session 153 10.3 自定义菜单 154 10.4 小结 157 第11章 案例:微信随手记 11.1 需求描述 159 11.2 数据库设计 159 11.3 代码实现 161 11.3.1 添加主题 161 11.3.3 主题查看 163 11.3.4 图片下载 166 11.3.5 图片预览 169 11.3.6 聊天机器人 170 11.3.7 入口函数 174 11.4 运行效果 175 11.5 小结 177

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值