小程序开发

微信小程序

01- 小程序是什么

  • 小程序是一种不须要下载安装便可使用的应用,它实现了应用 “触手可及” 的梦想,用户扫一扫或者搜一下便可打开应用。也体现了 用完即走 的理念,用户不用关心是否安装太多应用的问题。应用将无处不在,随时可用,但又无序安装卸载
  • 微信小程序是一种全新的链接用户与服务的方式,它能够在微信内被便捷地获取和传播,同时具备出色的使用体验

02- 优点

  • 1 无需安装卸载,无需单独注册软件
  • 2 每一个小程序都有 10 亿的潜在用户
  • 3 基于微信,能够被便捷地获取和传播

03- 注意点

  • 劣势:功能受限于微信
  • 基于微信,只能在微信内部使用
  • 默认状况下,微信是没有小程序的,搜索打开一个小程序后就有了
  • 重要:小程序不是 web,相似于 web(对前端开发人员友好)

04- 体验小程序

  • 体验小程序
  • 小程序开发的两个组成部分:1 组件 2 API
  • 开放接口:用于获取与微信相关的数据

05- 注册小程序

  • 微信公众平台
  • 进入后台:设置 -> 开发设置 -> 拿到 AppID(建立小程序项目使用)

06- 要求

  • 1 每一个邮箱仅能申请一个小程序
  • 2 未被微信公众平台注册,未被微信开放平台注册,未被我的微信号绑定的邮箱

07- 注册流程

  • 1 填写账号信息
  • 2 邮件激活
    • 进入上一步的注册邮箱,点击激活连接,激活小程序
  • 3 信息登记
    • 须要实名认证
  • 注册完成后,在左侧边栏的 设置 -> 开发设置 中拿到:AppID

08- 微信开发者工具

  • 安装html

  • 开发者工具使用前端

  • 说明:第一次使用工具须要使用注册小程序的微信扫码登陆git

  • 建立小程序项目:github

    • 1 项目目录:使用空目录
    • 2 AppID: 使用注册后获取到的 AppID
    • 3 项目名称:非小程序名称,能够是任意名称
    • 4 创建普通快速启动模板:初始化项目基本结构(空的项目目录中才有这个提示)
    • 5 点击编译菜单,运行QuickStart项目(模拟器中展现的欢迎页)
  • 演示:打开已存在的项目,以及认识开发者工具web

09- 小程序项目结构

pages/ ---------------- 页面(组件),全部页面都应该放到这个目录中
  index/  ------------- index文件夹
    index.js ---------- index页面的逻辑代码
    index.wxml -------- index页面的HTML结构
    index.wxss -------- index页面的CSS样式
    index.json -------- 页面配置(可选)
utils/ ---------------- 公共工具(函数)
app.js ---------------- 逻辑
app.json -------------- 全局配置(包括了小程序的全部页面路径、界面表现、网络超时时间、底部 tab 等)
app.wxss -------------- 全局样式(CSS)
project.config.json --- 开发工具配置(例如ES6转ES五、界面颜色、编译配置等)
复制代码

10- pages 基本使用

  • 约定:1 全部页面放到pages目录中
  • 约定:2 文件名称与文件夹名称相同
  • 约定:3 全部须要展现的页面都要在app.json中进行配置
  • 说明:在app.json中配置pages,能够快速建立页面
app.json 配置说明:
1 全部的页面都须要配置到 `pages` 配置项中
2 `pages` 数组的第一项表示进入小程序要展现的页面
复制代码
<text></text> :用来展现文字内容,相似于 span
复制代码

11- 小程序配置

  • 配置 - app 和 pagejson

  • app.json 文件用来对微信小程序进行全局配置,决定页面文件的路径、窗口表现、设置网络超时时间、设置多 tab 等小程序

  • page.json 页面的.json 只能设置 window 相关的配置项,以决定本页面的窗口表现微信小程序

  • app.json 是全局配置api

  • [page].json 是针对当前页面的配置,若是页面中的配置与全局配置冲突,是以页面配置为准跨域

12- 标签栏 - tabBar

  • 当设置 position 为 top 时,将不会显示 icon
  • tabBar 中的 list 是一个数组,只能配置最少 2 个、最多 5 个 tab,tab 按数组的顺序排序
  • 注意:没有出如今tabBar.listpagePath页面不展现标签栏

13- 数据绑定

  • WXML 中的动态数据均来自对应 Page 的 data
<text>{{ msg }}</text>

<input type="text" value="{{ msg }}">

<checkbox checked="{{isAgree}}"></checkbox>
复制代码

14- 条件渲染

  • wx:if
<view wx:if="{{ isLoading }}">
  <text>数据加载中...</text>
</view>
<!-- <view wx:elif=""></view> -->
<view wx:else>
  <text>搞定啦~</text>
</view>

<!-- 隐藏多个元素,不改变 wxml的层级结构 -->
<block wx:if="{{ isLoading }}">
  <text>小明</text>
  <text>小红</text>
</block>
复制代码
  • hidden
<view hidden="{{ isLoading }}">
  <text>搞定啦~</text>
</view>
复制代码

15- 列表渲染

  • wx:for:遍历数组,在元素中经过index获取索引号,经过item获取当前项
  • wx:for-index="idx":替换默认的 index
  • wx:for-item="it":替换默认的 item
  • 注意:遍历数组元素的时候,须要添加wx:key属性,来提升渲染性能
<view wx:for="{{ list }}" wx:for-index="idx" wx:for-item="itemName" wx:key="itemName.id">
  {{idx}}: {{itemName.message}}
</view>
复制代码

16- 事件处理

  • 绑定事件:1 bindtap 2 catchtap
  • 说明:bind 事件绑定不会阻止冒泡事件向上冒泡,catch 事件绑定能够阻止冒泡事件向上冒泡
  • 说明:经过标签的自定义属性data-*,实现给事件“传递”参数
<button bindtap="sayHi" data-msg="test">
  点我吧
</button>;

Page({
  sayHi(event) {
    console.log("单击事件触发了~", event.currentTarget.dataset.msg);
  }
});
复制代码

17- 数据操做

  • setData
  • setData():更新数据
    • 说明:将数据从逻辑层发送到视图层(异步),同时改变对应的 this.data 的值(同步)
    • 1 修改 data 中的数据
    • 2 更新视图,也就是说:视图中使用该数据的地方会从新渲染
this.setData({
  name: "jack"
});
复制代码
  • 文本框操做:
<input value="{{ input }}" bindinput="inputChangeHandle" />;

Page({
  inputChangeHandle: function(e) {
    this.setData({ input: e.detail.value });
  }
});
复制代码

18- 小程序样式

  • 尺寸单位 rpx
  • wsxx 演示 rpx 的基本使用
    • 小程序默认宽度:750rpx
  • 演示 @import 的基本使用
  • 布局:flex

19- UI 库

20- 应用生命周期

21- todomvc 案例

  • 每一个框架或库都应该写一个 todomvc,来了解这个框架的使用模式是怎样的

小程序中的 todo 案例的功能

  • 1 欢迎界面(没有任务就展现欢迎界面,有任务就展现任务列表)
    • 注意:欢迎界面 和 任务列表 只能二选一
  • 2 展现任务列表
  • 3 添加任务
    • 剩余任务数量会改变
  • 4 任务状态切换(完成和未完成)
    • 剩余任务数量会改变
    • 当全部的任务都完成,隐藏剩余任务数量展现
  • 5 删除任务
    • 剩余任务数量会改变(删除未完成任务)
  • 6 切换全部任务的选中状态
    • 只要有一项是选中的,那么,就应该让其余项也选中
  • 7 展现清除已完成任务按钮
    • 1 当有已完成的任务,就展现
    • 2 单击清除已完成任务按钮,会清除全部已完成的任务
任务中须要频繁处理的操做:
1 清除已完成任务按钮 的展现和隐藏
2 剩余任务(未完成任务)的展现和隐藏
复制代码
<!-- 小程序中的图片标签:相似于 web 中的img标签 -->
<image src="图片路径"></image>

<!-- 小程序中的图标,用于展现一个小图标 -->
<!-- type 表示当前 icon 的类型 -->
<icon class="checkbox" type="success"/>
复制代码

导航

  • 注意:不一样的open-type能跳转到的页面也不一样
  • 注意:navigator组件必须指定url,不然会报错
  • 注意:默认状况下,navigator 没法跳转到 tabBar 中配置的页面,若是想要跳转到 tabBar 中的页面,须要修改open-type类型
  • 路由 - 页面跳转
<navigator url="/pages/page1/page1">跳转页面page1</navigator>

<!-- 跳转页面,而且传递参数 -->
<navigator url="/pages/page1/page1?page=1&limit=10">跳转页面page1</navigator>
复制代码

样式的处理

  • 1 图片必需要设置宽度和高度,若是只设置宽度或高度其中一种,图片是不会自动适应
  • 2 使用rpx代替原始的px像素
  • 3 使用flex布局,也能够配合百分比布局来使用
  • 4 图片有mode用来设置图片的展现模式

底部菜单配置

  • 1 list 中每个菜单项的pagePath属性不能使用/开头
  • 2 文字颜色 以及选中项文字颜色,只能统一设置不能单独设置

小程序发送请求的说明

  • 关于小程序中网络相关 API 的说明

  • 1 在实际的项目中须要在开发设置中配置服务器域名,而后,小程序才能发送请求获取数据

  • 2 可是,在开发期间,能够忽略这一步

    • 在开发工具右上角的详情菜单中,勾选最后一项:不校验安全域名、TLS版本以及HTTPS证书
  • 3 在小程序不用考虑跨域的问题,由于小程序是基于微信这个客户端

  • 4 没法在小程序中使用 XHR 对象,发送请求