原生小程序

一般小程序是指微信小程序。

小程序平台:微信,支付宝,微博,百度,腾讯,抖音

微信小程序为例:原生开发(js) ——>  mpvue——> uniapp

学习原生小程序开发(开发流程)逐渐过渡到uniapp开发流程。学习原生小程序

学习原生小程序

一、注册账号

1、进入微信公众平台

微信公众平台 (qq.com)

微信开发者信息 微信app开发者_微信开发者信息

2、下拉找到小程序

微信开发者信息 微信app开发者_小程序_02

 3、点击详情注册开发小程序的账号

微信开发者信息 微信app开发者_微信_03

        注意:

        1、注册分为个人注册和企业注册

        2、小程序上线都可以

        3、个人小程序(不能获取用户手机号) 企业是可以的

        4、支付不同  个人小程序无支付  企业可以认证支付

 4、进入官方文档

微信开放文档 (qq.com)

二、登录小程序账号

注:appid是较为重要的,注意不要轻易泄漏给别人

三、下载开发者工具

1、打开微信开发者工具,第一次打开界面如图所示:

微信开发者信息 微信app开发者_微信_04

 2、模板选择js模板

3、项目目录结构

微信开发者信息 微信app开发者_微信_05

(1)pages文件夹:主界面

index.js:业务逻辑

index.wxml:网页模板

index.wxss:css样式

(2)util文件夹:工具类

(3)app.js:全局主文件

(4)app.json:全局配置文件

(5)app.wxss:全局css

 四、删除项目中无用的代码

原生js界面存在实例Page构造类,创建新项目删除即可

五、开始论坛项目的底部,在pages文件夹下创建msg和my文件夹

微信开发者信息 微信app开发者_微信小程序_06

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

tabBar

如果小程序是一个多tab应用,可以通过tabBar配置项指定tab栏的表现,以及tab切换时显示的对应页面。

重要属性:

微信开发者信息 微信app开发者_微信_07

 细节:tab 的列表,详见 list 属性说明,最少 2 个、最多 5 个 tab

list栏位的属性:

微信开发者信息 微信app开发者_小程序_08

注:icon限制大小40kb,建议尺寸81*81,不支持网络图片。position为top时不显示icon

在app.json文件中创建tabBar

"tabBar": {
    "list": [
      {
        "pagePath": "pages/index/index",
        "text": "首页",
        "iconPath": "assets/tabbar/daxiao.png",
        "selectedIconPath": "assets/tabbar/qushi.png"
      },
      {
        "pagePath": "pages/msg/msg",
        "text": "消息",
        "iconPath": "assets/tabbar/fadai.png",
        "selectedIconPath": "assets/tabbar/qinqin.png"
      },
      {
        "pagePath": "pages/my/my",
        "text": "我的",
        "iconPath": "assets/tabbar/liuhan.png",
        "selectedIconPath": "assets/tabbar/kunao.png"
      }
    ]
  },

微信开发者信息 微信app开发者_微信小程序_09

窗口表现

用于设置小程序的状态栏、导航条、标题、窗口背景色。

更改小程序默认启动页

原生小程序默认是以pages下的第一个界面作为启动页面的

微信开发者信息 微信app开发者_微信开发者信息_10

 六、原生小程序页面的制作

内置标签:

(1)view:视图容器,类似div,整体布局使用view搭建框架,原生小程序采用flex布局

(2)image:图片标签  类似img  src路径,可以相对../   直接绝对   /项目根开始

(3)text:文本标签  类似span  包裹文字

微信开发者信息 微信app开发者_微信_11

 轮播图

<view class="swiper-list">
    <swiper indicator-dots="true" indicator-color="rgb(255,255,255)" autoplay="true">
      <!-- 循环 -->
      <swiper-item wx:for="{{bannerList}}" wx:key="indexs" wx:for-item="items" wx:for-index="indexs">
        <view class="banner-list">
          <!-- 导航 -->
          <navigator url="/pages/detail/detail?id={{items.id}}" open-type="navigate">
            <image src="{{items.path}}"></image>
          </navigator>
        </view>
      </swiper-item>
    </swiper>
  </view>

 

微信开发者信息 微信app开发者_生命周期_12

 七、熟悉原生小程序开发中pages

***.js:是当前页面的业务文件,在改文件中写相对应的页面的业务操作

微信开发者信息 微信app开发者_微信小程序_13

 项目中的js文件:

app.js为全局项目入口文件。定义的操作为整个项目全局使用,存在App构造类  为全局的

utils.js:为公用业务逻辑封装

index.js:当前页面的业务文件

app.js文件中:

globaData:配置整个项目的全局变量

微信开发者信息 微信app开发者_生命周期_14

 界面的js文件中获取整个全局变量

const app = getApp();        //获取整个应用的实例

  八、app文件或者界面的js文件中存在大量的API

界面js文件中Page()注册一个小程序界面

注册小程序中的一个页面。接收一个Object类型参数,其指定页面的初始数据、生命周期回调、事件处理函数等。

 Page里面的周期


// index.js

// 获取应用实例

const app = getApp()



// 原生小程序

Page({


  /**

   * 页面的初始数据

   */

  data: {

   

  },


  /**

   * 生命周期函数--监听页面加载

   * options  接收加载界面传值的

   */

  onLoad: async function (options) {

     

  },


  /**

   * 生命周期函数--监听页面初次渲染完成

   * 首次加载

   */

  onReady: function () {

    

  },


  /**

   * 生命周期函数--监听页面显示

   * 后台切到前台执行

   */

  onShow: function () {

    

  },


  /**

   * 生命周期函数--监听页面隐藏

   */

  onHide: function () {

    

  },


  /**

   * 生命周期函数--监听页面卸载

   */

  onUnload: function () {

    

  },


  /**

   * 页面相关事件处理函数--监听用户下拉动作

   */

  onPullDownRefresh: function () {

   

  },


  /**

   * 页面上拉触底事件的处理函数

   */

  onReachBottom: function () {

    

  },


  /**

   * 用户点击右上角分享

   */

  onShareAppMessage: function () {

    

  }

})

page界面中的语法规则 

<view wx:for="{{array}}">
  {{index}}: {{item.message}}
</view>
默认数组的当前项的下标变量名默认为 index,数组当前项的变量名默认为 item
  <!-- 循环渲染 -->
      <swiper-item wx:for="{{bannerList}}" wx:key="index">
        <view class="banner-list">
          <!-- 导航 -->
          <navigator url="/pages/detail/detail?id={{item.id}}" open-type="navigate">
            <image src="{{item.path}}"></image>
          </navigator>
        </view>
      </swiper-item>
使用 wx:for-item 可以指定数组当前元素的变量名,

使用 wx:for-index 可以指定数组当前下标的变量名:
<swiper-item wx:for="{{bannerList}}" wx:key="indexs" wx:for-item="items" wx:for-index="indexs">

 九、使用原生小程序内置api

原生小程序中发送请求需要使用:

微信开发者信息 微信app开发者_微信小程序_15

 注意:发起 HTTPS 网络请求。使用前请注意阅读相关说明。小程序打包上线  请求的协议必须是https 协议。

ajax请求写法

wx.request({
  url: 'example.php', //示例,并非真实的接口地址
  data: {
    x: '',
    y: ''
  },
  header: {
    'content-type': 'application/json' // 默认值
  },
  success (res) {
    console.log(res.data)
  }

在page界面中写请求

/**
   * 生命周期函数--监听页面加载
   * options  接收加载界面传值的
   */
  onLoad: function (options) {
    //发送请求
    wx.request({
      url: '',
      success(){

      },
      fail(){

      },
      complete(){
        
      }
    })
  },

缓存的api

微信开发者信息 微信app开发者_微信_16

 封装的请求文件

//封装ajax 请求  封装为promise
let header = {};
//操作缓存
function getStorage(key) {
    return wx.getStorageSync(key);
}
//封装ajax
function Request(url, method, data) {
    //检测用户是否登录 存在token
    let token = getStorage("_token");
    if (token) {
        header['token'] = token;
    }
    return new Promise((resolve, reject) => {
        //创建request请求
        wx.request({
            url: url,
            data: data,
            method: method,
            header: header,
            success(res) {
                //请求成功
                resolve(res);
            },
            fail(error) {
                reject(error);
            }
        })
    });
}
//导出文件
module.exports = {
    Request,
    getStorage
}

注意:在page页面中发送请求报错说请求域名没有配置不合法问题。

微信开发者信息 微信app开发者_微信小程序_17

 在Page周期中引入ajax发送请求获取数据设置到data数据源

data: {
    //轮播图数据
    bannerList: [{
        id: 1,
        path: "/assets/banner/1.jpg"
      },
      {
        id: 2,
        path: "/assets/banner/2.jpg"
      },
      {
        id: 3,
        path: "/assets/banner/3.jpg"
      }
    ],
    currentPage: 1, //当前页
    lastPost:[],//最新动态
  },

  /**
   * 生命周期函数--监听页面加载
   * options  接收加载界面传值的
   */
  onLoad: async function (options) {
    //获取数据源
    let { currentPage } = this.data;
    //发送请求
    let res=await findLastPost(currentPage);
    this.setData({
      lastPost:res.data.result.data
    });
  },

完成效果如下图所示:

微信开发者信息 微信app开发者_小程序_18