微信小程序的惊喜瞬间

356 阅读4分钟

一直以来都没有机会接触到微信小程序开发,今天leader找到我,问我有没有兴趣接一个小程序的项目,我简直乐开了花, 等了好久终于等到今天,于是开始了一些列操作。。。

官方网站:(自己去官方查阅组件,框架,发布,api等流程)

1.安装开发者工具:微信官方网站安装即可

2.简单看一下官方文档 进行基本的了解

3.浏览公司已有小程序项目,向前辈学习

4.开始看需求

5.着手开发项目

6.总结:

一个新的框架,需要快速了解的如下知识点,即可进行开发

1》路由,页面如何跳转

在根目录下app.json文件中,可以对所有文件的路径进行配置。

{
// 路由配置
  "pages": [
    "pages/home/index",
    "pages/mine/index",
    "pages/hosInfo/index",
    "pages/index/index",
    "pages/logs/logs"
  ],
  //下方tab页导航切换
  "tabBar": {
    "color": "#888888",
    "selectedColor": "#6FA4F9",
    "backgroundColor": "#ffffff",
    "position": "bottom",
    "list": [
      {
        "pagePath": "pages/home/index",
        "text": "互联网医院",
        "iconPath": "./images/new/hos.png",
        "selectedIconPath": "./images/new/hos_active.png"
      },
      {
        "pagePath": "pages/hosInfo/index",
        "text": "医院信息",
        "iconPath": "./images/new/home.png",
        "selectedIconPath": "./images/new/home_active.png"
      }]
  }
}

所有页面进行挂载,那么页面如何跳转呢?

wx.navigateTo({
    url: '../../pages/logs/logs'
});

注意: navigateTo, redirectTo 只能打开非 tabBar 页面。

switchTab 只能打开 tabBar 页面。

reLaunch 可以打开任意页面。

页面底部的 tabBar 由页面决定,即只要是定义为 tabBar 的页面,底部都有 tabBar。

调用页面路由带的参数可以在目标页面的onLoad中获取。

2》前后端如何通信

微信小程序因不运行在浏览器,因此不存在跨域问题,直接调用后端接口即可,封装后如下:

在urils文件夹下建立一个文件命名为services ,封装一get请求 一个post请求

var rootDocment = 'https://xxxxxxxxxxxxx/';
var header = {
  'Accept': 'application/json',
  'content-type': 'application/json',
  'Authorization': null,
}
function getReq(url, cb) {
  wx.showLoading({
    title: '加载中',
  })
  console.log("header=="),
    console.log(header)
  wx.request({
    url: rootDocment + url,
    method: 'get',
    header: header,
    success: function (res) {
      wx.hideLoading();
      return typeof cb == "function" && cb(res.data)
    },
    fail: function () {
      wx.hideLoading();
      wx.showModal({
        title: '网络错误',
        content: '网络出错,请刷新重试',
        showCancel: false
      })
      return typeof cb == "function" && cb(false)
    }
  })
}
 
function postReq(url, data, cb) {
  wx.showLoading({
    title: '加载中',
  })
    console.log("header=="),
    console.log(header),
    wx.request({
      url: rootDocment + url,
      header: header,
      data: data,
      method: 'post',
      success: function (res) {
        wx.hideLoading();
        return typeof cb == "function" && cb(res.data)
      },
      fail: function () {
        wx.hideLoading();
        wx.showModal({
          title: '网络错误',
          content: '网络出错,请刷新重试',
          showCancel: false
        })
        return typeof cb == "function" && cb(false)
      }
    })
 
}

// 或者这样用异步Promise处理
function ajaxurl,params,method{
   return new Promise((resolve, reject) => {
    wx.request({
      url: rootDocment + url,
      data: JSON.stringify(params),
      header,
      method:method || 'POST',
      success: function (res) {
        resolve(res.data)  
      },
      fail: function (err) {
        wx.showModal({
          title: '网络错误',
          content: '网络出错,请刷新重试',
          showCancel: false
        })
      }
    })
  })

}
module.exports = {
  getReq:getReq,
  postReq:postReq,
  header: header,
  ajaxHandle:ajax,
} 

如何调用呢?

var Ajax = require('../../utils/service');
  Ajax.getReq("item/getshopbanner/"+getApp().globalData.shopIdx,function(res){
      console.log("banner==")
      console.log(res)
    })

3》多页面间数据如何通信

小程序中并不存在类似react中的redux,或者vue中的vuex概念 但是 同样有三重方式来实现多页面或者多组件间数据通信 1.url传值

A页面
// 点击列表
clickReleaseItem: function (e) {
  var release = e.currentTarget.dataset.para;
  wx.navigateTo({
    url: '../../pages/releaseDetail/releaseDetail?release=' + JSON.stringify(release)
  })
},


B页面
/**
 * 生命周期函数--监听页面加载
 */
onLoad: function (options) {
  this.setData({
    // 获取上个页面传过来的列表发布信息
    currentRelease: JSON.parse(options.release)
  });
},
2.本地存储
A页面
/* 把发布信息异步存储到缓存当中 */
wx.setStorage({
  key: 'releases',
  data: list,
})
B页面
// 本地获取收藏的发布信息
var that = this;
wx.getStorage({
  key: 'releases',
  success: function (res) {
    that.setData({
      releaseArray: res.data
    });
  },
})

3.全局的 app 对象
A页面

var app = getApp();
app.releaseData = release;
复制代码
B页面
var app = getApp();
var release = app.releaseData;

4》一个页面例如home首页 的基本构成

创建一个文件夹 home 同时里面存在四个文件 |文件类型| 必需| 作用| |js | 是| 页面逻辑| |wxml| 是| 页面结构| |json| 否| 页面配置| |wxss| 否| 页面样式表|

5》生命周期

官方网站有生命周期原理图

// pages/home/index.js
var Ajax = require('../../utils/service');


Page({

  /**
   * 页面的初始数据
   */
  data: {
    
  },

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

  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady: function () {

  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow: function () {

  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide: function () {

  },

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

  },

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

  },

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

  },

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

  },


})

我将知识点总结会分享在博客中。并且记录自己的体会。 剩下将会记录我在项目中遇到的问题 并记录如何解决方案