微信小程序

微信小程序

    • 1. 注册微信公众平台,下载微信开发者工具
    • 2.创建的项目的目录结构
    • 3. 新建一个页面,需要生成 4个文件 ***
    • 4.小程序标签 *
    • 5. 配置 底部导航 ***
    • 6. 页面配置
    • 7.小程序与普通网页开发的区别 ***
    • 8 .小程序和原生App 的区别
    • 9.小程序的原理是什么?小程序是如何工作的
    • 10. wxml 语法
    • 11 wxss 的特点
    • 12.获取数据
    • 13.钩子函数
    • 14. 模块的使用
    • 15. 小程序中request的封装都封装了哪些内容
    • 16.小程序 使用 原来的旧项目需要注意
    • 17. 事件 ***
    • 18 钩子函数 ***
    • 19.页面路由跳转 ***
    • 20 页面间传参 ***
    • 21. 小程序的模板使用
    • 22. wxs
    • 23.小程序中的简易双向绑定
    • 24 获取界面上的节点信息
    • 25 动画的使用
    • 26 .初始渲染缓存,
    • 27.小程序的冷启动和热启动
            • 小程序销毁时机
    • 28.组件 ***
    • 29. 使用 插件
    • 30 小程序分包
    • 打包原则
    • 引用原则
    • 31 小程序的登录流程
    • 32 小程序的支付
    • 33.小程序的优化 ***
    • 34 webview中的页面怎么跳回小程序中?
    • 35 使用webview直接加载要注意哪些事项?
    • 36 请谈谈原生开发小程序、wepy、mpvue 的对比?
    • 37 .小程序调用后台接口遇到哪些问题?

1. 注册微信公众平台,下载微信开发者工具

1.1 注册账号、下载工具、创建小程序

https://mp.weixin.qq.com/

需要记录 AppID

创建第一个小程序

1.2 发布小程序

小程序开发者工具点击“上传” - 提交到服务器上的开发版本- 在服务器后台点击 “提交审核” - 审核版本-审核需要一周左右的时间

需要支付 ,需要预留2周时间部署,

1.3 成员管理

需要设置项目成员,可以完成多人开发一个小程序

1.4 配置 客服人员

1.5 开发-开发管理-开发设置

a. 记录一下 AppID

自己保存一下 AppSecret(小程序秘钥)

每一次只能重新生成

b. 可以设置 ip白名单 ,

c. 可以设置上传的加密的秘钥

d. 重要:需要设置 服务器域名

request合法域名 *** 获取数据的合法域名

socket合法域名 *

uploadFile合法域名 *

downloadFile合法域名 *

注意:只能设置 https 或 wss域名 ,需要有 ssl加密层

1.6 设置 - 第三方设置 - 插件管理

所有的第三方插件可以在这里安装

2.创建的项目的目录结构

pages 页面

​ index 首页页面 有4个文件

​ logs 日志页面

utils 公共的js 文件 时间戳转日期时间,封装获取数据

app.js 小程序的主入口文件

app.json 小程序的主文件的配置文件

app.wxss 主文件的样式

project.config.json 项目的配置文件

sitemap.json 站点配置文件

3. 新建一个页面,需要生成 4个文件 ***

js

wxml 相当于 html

wxss 相当于 css

json 配置

在 app.json 中会自动默认生成该页的路由

如:

{
  "pages": [
    "pages/index/index",
    "pages/logs/logs",
    "pages/about/about"
  ],

4.小程序标签 *

view - div

text - span

image - img

block - template 不会解析成任何标签,一般用于 if for

5. 配置 底部导航 ***

App.json

"pages": [
    "pages/index/index",
    "pages/logs/logs",
    "pages/about/about"
  ],
  "tabBar":{
    "color":"#666",
    "selectedColor": "#445356",
    "list":[
      {
        "pagePath":"pages/index/index",
        "text":"首页",
        "iconPath":"images/n-1-a.png",
        "selectedIconPath": "images/n-1.png"
      },
      {
        "pagePath":"pages/logs/logs",
        "text":"日志",
        "iconPath":"images/n-2-a.png",
        "selectedIconPath": "images/n-2.png"
      },
      {
        "pagePath":"pages/about/about",
        "text":"关于",
        "iconPath":"images/n-4-a.png",
        "selectedIconPath": "images/n-4.png"
      }
    ]
  },

​ 注意:底部导航 只能有 2-5项,否则会报错

小图标只能使用 本地图片

6. 页面配置

6.1 全局页面配置

pages:路由

tabBar:底部导航

window: 窗口

​ backgroundTextStyle 当需要下拉刷新时,需要配置为 dark

navigationBarTitleText 小程序的名称

"networkTimeout": {
    "request": 10000,  获取数据的过期时间
    "downloadFile": 10000  下载文件的过期时间
  },
  "debug": true   要不要显示提示信息

6.2 某个页的页面配置

 "navigationBarTitleText"  页面标题
"usingComponents"  配置使用的组件的名称和地址
"enablePullDownRefresh" true 开启下拉刷新 

7.小程序与普通网页开发的区别 ***

1.网页开发渲染线程和脚本线程是互斥的 ;小程序中,二者是分开的,分别运行在不同的线程中, DOM API、JSCore

2.小程序没有一个完整浏览器对象,因而缺少相关的DOM API和BOM API

3.执行环境不同,网页 在浏览器运行;小程序在小程序的服务器运行

4.标签不一样 ,小程序 view text image block…

5.获取的系统权限不一样,小程序可以获取 手机通讯录、摄像头、照片…

6.开发成本不同 ,小程序开发成本更低

8 .小程序和原生App 的区别

1.app 需要下载安装,占用手机内存;小程序不需要安装、用完即走

2.推广渠道不一样,小程序依托的微信的基础用户

3.小程序开发成本低,app开发成本很高

4.app速度比小程快、app可以调用更多的手机底层api

9.小程序的原理是什么?小程序是如何工作的

小程序的运行环境分成渲染层和逻辑层,其中 WXML 模板和 WXSS 样式工作在渲染层,JS 脚本工作在逻辑层。

小程序的渲染层和逻辑层分别由2个线程管理:渲染层的界面使用了WebView 进行渲染;逻辑层采用JsCore线程运行JS脚本。一个小程序存在多个界面,所以渲染层存在多个WebView线程,这两个线程的通信会经由微信客户端(下文中也会采用Native来代指微信客户端)做中转,逻辑层发送网络请求也经由Native转发,小程序的通信模型下图所示。

10. wxml 语法

10.1 变量

在 wxml 中 需要使用 {{}}来渲染

更改 data中的数据 需要使用

this.setData({data中的数据名:要赋值的新值})

微信小程序是单向数据流,直接赋值不会触发页面更新渲染

和react一样

10.2 列表渲染 for

a.基础for

 
    日志内容:{{item.content}}
    日志时间:{{item.time}}
   

b.wx:for 循环中 可以使用 key

可以使用 数据中的 id号


    日志内容:{{item.content}}
    日志时间:{{item.time}}
   

可以使用下标


    日志内容:{{item.content}}
    日志时间:{{item.time}}
  

还可以使用 *this


    日志内容:{{item.content}}
    日志时间:{{item.time}}
  

注意:

循环的时候,默认 item代表一行,index 代表这一行的下标

循环时需要使用 key ,否则会报错,key作用 唯一标识一行,提高性能

c.嵌套循环

wx:for-item 为item起别名
wx:for-index 为index起别名

d.使用循环时,可以在 block中写循环,block不需要解析为任何标签,减少标签层级

10.3 判断条件

  数据小于20
  数据大于20
  数据等于20

注意:也可以使用 在 block标签中

11 wxss 的特点

11.1 wxss 有rpx的单位,可以适应所有的手机屏幕

ui作图需要使用 iphone678 ,

作图如果是2倍图 ,宽度 750px,

ui图和 rpx的比例是1:1 的比例,

在小程序上建议使用 rpx

11.2 app.wxss 全局样式,

页面名称.wxss 样式只在本业页起作用

11.3 @import “样式文件名.wxss ” 引入样式

11.4 内联样式的写法:

style="color:{{color}}"

12.获取数据

12.1 需要配置 语序跨域的域名

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-movvjQfj-1635585528828)(E:\2021-07-26\09-wechat\day01\note\images\配置.bmp)]

文档-api-网络-发起请求

wx.request

onLoad: function (options) {
    wx.request({
      url: 'https://www.51houniao.com/product/product/getProductRecommendUser',
      data:{
        desc: false,
        orderBy: "top",
        pageNow: 1,
        pageSize: 20,
        seller_user_id: "4bc4027c645343f09a964b5c2e9f875b"
      },
      method:"post",
      //请求成功
      success:(res)=>{
        console.log(res);
        this.setData({tuijianArr:res.data})
      }
    })
  },

13.钩子函数

在 onLoad 的钩子函数中获取数据

14. 模块的使用

输出:

//模块输出
module.exports = {
  request:pagedata.request
}

引入:

//引入封装好的request
const fetch = require("../../utils/http");

15. 小程序中request的封装都封装了哪些内容

  1. 基础的api路径
  2. 请求方式、请求路径、请求参数
  3. 加载中效果
  4. 使用 promise ,避免了回调地狱
  5. 输出 使用 module.exports ,在 页面中引入 使用 require

16.小程序 使用 原来的旧项目需要注意

16.1 导入老项目,导入时 可以使用 测试号,需要在 开发者工具-详情-本地设置-不校验合法域名 画上对号

16.2 老项目 ,本地设置中的调试基础库需要降低版本,否则会报错

17. 事件 ***

17.1 普通的事件

wxml


js

 //测试函数
  testFun:function(){
    console.log("函数运行了");
    this.setData({num:this.data.num+1})
  },

17.2 需要传递参数

wxml 传递参数 data-key=“value”


js 中 使用 ev.currentTarget.dataset.** 接收参数

  testFun1:function(ev){
    console.log(ev.currentTarget.dataset.name);
  },

17.3 input框怎样接收wxml传过来的数据

wxml


js 中接收需要写成 ev.detail.value

  addFun:function(ev){
    console.log(ev);
    this.setData({heroname:ev.detail.value})
  },

17.4 事件绑定分为 冒泡的事件绑定 bind*** ,阻止冒泡的事件绑定catch***

17.5 小程序事件

类型 触发条件 最低版本
touchstart 手指触摸动作开始
touchmove 手指触摸后移动
touchcancel 手指触摸动作被打断,如来电提醒,弹窗
touchend 手指触摸动作结束
tap 手指触摸后马上离开
longpress 手指触摸后,超过350ms再离开,如果指定了事件回调函数并触发了这个事件,tap事件将不被触发 1.5.0
longtap 手指触摸后,超过350ms再离开(推荐使用longpress事件代替)
transitionend 会在 WXSS transition 或 wx.createAnimation 动画结束后触发
animationstart 会在一个 WXSS animation 动画开始时触发
animationiteration 会在一个 WXSS animation 一次迭代结束时触发
animationend 会在一个 WXSS animation 动画完成时触发
touchforcechange 在支持 3D Touch 的 iPhone 设备,重按时会触发 1.9.90

bindinput 表单输入时触发的事件

submit 提交事件

scroll 滚动事件

18 钩子函数 ***

18.1 页面钩子函数

onLoad 页面加载 ***

onReady 页面初次渲染完成 ***

onShow 显示***

onHide 隐藏***

onUnload 页面卸载***

onPullDownRefresh 下拉刷新的钩子函数 *

onReachBottom 上拉加载更多*

onShareAppMessage 分享时触发的钩子函数*

/**
   * 生命周期函数--监听页面加载 只能执行一次
   */
  onLoad: function (options) {
    console.log('onLoad');
  },
  /**
   * 生命周期函数--监听页面初次渲染完成 只能执行一次
   */
  onReady: function () {
    console.log('onReady');
  },

  /**
   * 生命周期函数--监听页面显示 执行多次
   */
  onShow: function () {
    console.log('onShow');
  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide: function () {
    console.log('onHide');
  },
  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload: function () {
    console.log('onUnload');
  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh: function () {
  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom: function () {

  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage: function () {

  }

App.js 中的钩子函数

属性	类型	默认值	必填	说明	最低版本
onLaunch	function		否	生命周期回调——监听小程序初始化。	***
onShow	function		否	生命周期回调——监听小程序启动或切前台。	
onHide	function		否	生命周期回调——监听小程序切后台。	
onError	function		否	错误监听函数。	  ***
onPageNotFound

19.页面路由跳转 ***

路由方式 触发时机 路由前页面 路由后页面
初始化 小程序打开的第一个页面 onLoad, onShow
打开新页面 调用 API wx.navigateTo 使用组件 `` onHide onLoad, onShow
页面重定向 调用 API wx.redirectTo 使用组件 `` onUnload onLoad, onShow
页面返回 调用 API wx.navigateBack 使用组件`` 用户按左上角返回按钮 onUnload onShow
Tab 切换 调用 API wx.switchTab 使用组件 `` 用户切换 Tab 各种情况请参考下表
重启动 调用 API wx.reLaunch 使用组件 `` onUnload onLoad, onShow

19.1 跳转 tabbar页面 使用 ,注意: 不能传递参数

跳转到的页面 show ,其他页面 hide

wx.switchTab

跳转首页

19.2 navigateTo 跳转

不能跳转 tabbar

跳转到的页面有返回按钮,页面实质显示和隐藏,不会卸载或重新加载

navigateTo的页面 可以使用 navigateBack 返回

19.3 redirectTo 跳转

不能跳转 tabbar,跳转页面没有返回按钮,页面 在跳转时会卸载,再回来时需要重新加载

19.4 reLaunch 跳转

可以跳转任何页面,还可以传参,性能比 前面的几种稍差

20 页面间传参 ***

20.1 路由跳转时传参

A:传递参数

goAdd:function(){
    wx.navigateTo({
      url: '/pages/add/add?id='+this.data.userid,
    })
  },

B:接收参数 使用 onLoad 里面的 参数 options


  onLoad: function (options) {
    console.log(options.id);
  },

20.2 模块化传参

A:输出:

//模块输出
module.exports = {
  request:pagedata.request
}

B:引入:

//引入封装好的request
const fetch = require("../../utils/http");

20.3 使用 globalData 传递参数

在 App.js 中定义

 globalData: {
    userInfo: null,
    heroArr:[
      '葫芦娃','大黄蜂','托塔李天王'
    ]
  }

在其他页面使用

//引入 App.js
const app = getApp();

//使用 app中定义的全局变量
app.globalData.***

20.4 可以使用缓存 ***

A: 设置缓存信息

//调用  同步设置缓存信息
    wx.setStorageSync('userSto', this.data.user)

B: 获取缓存信息

 wx.getStorageSync('userSto')

小程序的缓存和网页的缓存的区别: **

  1. 网页 有 localStorage 和 sessionStorage;小程序只有 Storage
  2. 网页的缓存 保存的数据是 字符串,数据进去和出来时需要经过 序列化和反序列化JSON.parse 和 JSON.stringify;小程序的缓存中可以直接存对象或数组

21. 小程序的模板使用

21.1 基础模板

创建 模板文件

templates/listtuijian/listtuijian.wxml



使用 模板



  
  

21.2 模板传参

创建 模板文件

templates/listitem/listitem.wxml



使用 模板


  

21.3 include 可以将目标文件除了