小程序模块化—小程序入门与实战(十一)

代码远征
• 阅读 2448

上一章节我们讲了分页数据的处理, setData数据限制的解决办法,模板字符串以及触底分页获取数据。

那么这一章节我们学习小程序的模块化。

模块化

可以将一些公共的代码抽离成为一个单独的js文件,作为一个模块。

模块只有通过 module.exports 或者 exports 才能对外暴露接口。通过 require方式引入

  • exportsmodule.exports 的一个引用,因此在模块里边随意更改 exports 的指向会造成未知的错误。所以更推荐开发者采用 module.exports 来暴露模块接口,除非你已经清晰知道这两者的关系。
  • 小程序目前不支持直接引入 node_modules , 开发者需要使用到 node_modules 时候建议拷贝出相关的代码到小程序的目录中,或者使用小程序支持的 npm 功能。

同时小程序是支持 ES6 的 export 来暴露接口的,模块引入通过 import。

封装 wx.request

src/es6目录下新建一个 sandBox.js 文件

export const sandBox = {
    get({api, data, header}){
        return new Promise((resolve, reject) => {

            wx.request({
                url:"https://guojiang.club/"+api,
                header:header,
                data:data,
                method:'GET',
                success:res => {
                     resolve(res)
                },
                fail:rej => {

                    reject(rej)
                }
            })
        })
    },
    post({api, data, header}){
        return new Promise((resolve, reject) => {
            wx.request({
                url:"https://guojiang.club/"+api,
                data:data,
                header:header,
                method:'POST',
                success:res => {
                     resolve(res)
                },
                fail:rej => {
                    reject(rej)
                }
            })
        })
    }
};
或者第二种暴露模块的方式:
//module.exports.sandBox = sandBox
//需要去掉 export

src/es6 目录新建一个 myapp.js文件,主要用来放各个js模块。

# myapp.js
<!--使用-->
let sandBox = require('./sandbox.js')
//或者
import {sandBox} from './sandbox.js';

export {
    sandBox
}

上面代码介绍了两种暴露模块的方式:

  • 第一种使用小程序官方介绍的 module.exports 暴露模块,require引入模块。
  • 第二种是 ES6 的 export 暴露模块,import 引入模块。

使用

然后在 index.js中怎么使用呢?

有咩有盆友刚开始是这样子想的

<!--index.js-->
import {sandBox} from "../../es6/myapp.js";

就会报错

小程序模块化—小程序入门与实战(十一)

你在思考为什么会报错呢?

我们先来看看 我们一直拿开发者工具跑的 dist 里面的 src 目录。

小程序模块化—小程序入门与实战(十一)

并没有 es6 这个目录。是因为我们在 webpack.base.config这个文件的这一段代码:

context: path.join(__dirname, 'src/es6'),
    entry: {
        myapp:'./myapp.js'
    },
    output: {
        path: path.join(__dirname, 'dist/src/lib'),
        filename: '[name].js',
        libraryTarget: 'umd'
    },

src/es6 目录下的 myapp.js 文件 输出在 dist/src/lib目录下,文件名为 myapp.js

所以我们在 index.js 中引入 sandBox.js,需要这样子引入:

import {sandBox} from "../../lib/myapp.js";

然后在调用我们封装的 sandBox 方法发送请求:

 //获取首页数据信息
    getIndexCard(page){
        sandBox.get({
            api:'api/sir/card',
            data:{
                page:page
            }
        }).then(res=>{
            res = res.data;
            if(res.status){
                let pages = res.meta.pagination; //获取后台分页的分页数据 pagination
                let current_page = pages.current_page;//获取当前是那一页
                let total_pages = pages.total_pages;//获取总页面数
                //下面我们来赋值,这里会用到 es6 的模板字符串,有不懂得我们下面详细讲解
                this.setData({
                    [`cardList[${page-1}]`]:res.data,
                    page:current_page,
                    has_more:current_page < total_pages
                })
            } else {
            //显示模态对话框
               wx.showModal({
                   content:res.message || '服务器开了小差,请重试',
                   showCancel: false
               })
            }
        }).catch(rej=>{
        //显示模态对话框
            wx.showModal({
                content:rej.message || '内部错误',
                showCancel: false
            })
        })
    }

wx.showModal(Object object)

显示模态对话框

在上面的代码中,我们看到了 wx.showModal , 这是微信小程序的 API , 是用来界面交互反馈的。

  • content 是 “提示的内容”
  • showCancel 是 “是否显示取消按钮”

小程序模块化—小程序入门与实战(十一)

总结

  • 小程序模块化
  • 使用 ES6 promise 封装 wx.request,并使用
  • 界面交互反馈模态框 wx.showModal

下一章节我们讲解项目开发过程中在开发环境,生产环境设置不同的请求接口域名。

小程序模块化—小程序入门与实战(十一)

本文由博客群发一文多发等运营工具平台 OpenWrite 发布
点赞
收藏
评论区
推荐文章
小森森 小森森
2年前
计划助手V1.0-微信小程序(QQ小程序)-源代码分享
疫情期间在家感觉好无聊啊,于是利用空闲时间做了一个用来记录和管理小目标时间的小程序,命名为《小沙漏》。QQ版本小程序同步上线,QQ小程序叫《时间小沙漏》,欢迎大家前来体验,后期也会添加其他的新功能哦【区别】:微信小程序的代码与QQ小程序的源码是不一样的。微信小程序的源码基于微信小程序云开发,需要在有网络的情况下使用,具有同步功能,所有记录在删除小
Easter79 Easter79
3年前
Taro 牵手腾讯有数,助力小程序数据化运营
“ Taro引入了腾讯有数的微信小程序无痕埋点能力,为Taro的开发者提供真·零开发的8大无痕埋点能力以及自定义埋点能力,包含小程序启动、显示、隐藏、页面浏览、页面离开、分享、下拉刷新、上拉触底等八大自动化埋点能力以及搜索、商品归因等定制化埋点,以及经营分析、直播分析、导购分析等能力,让你的小程序可以基于微信生态,串联全场景多触点,
Wesley13 Wesley13
3年前
5G消息与微信小程序互联互通?北京国都互联这么做……
最近微信小程序上线了一个超级流量的新入口URLScheme,据微信官网介绍,scheme码适用于短信、邮件、外部网页等拉起小程序的业务场景。通过小程序页面的URLScheme,可以在短信、邮件或微信外部的网页中打开微信小程序。意义在于将微信流量生态延伸到微信以外渠道,进一步完善了小程序和外部渠道互通的营销场景。北京国都互联第一时
Stella981 Stella981
3年前
HotApp小程序统计云后台 免费的Https云后台服务器
小程序学习有些地方需要后台,比如需要存储数据到服务器,比如微信登录。hotapp有免费的小程序云后台包含基本的新增,查询,修改,删除操作,方便于学习,而且不需要微信appid也可使用。小程序微信手机调试appid,简单解决办法:http://www.wxappunion.com/forum.
Stella981 Stella981
3年前
JFinal各种场景(PC、APP、微信小程序等)分页方案
JFinal专题之分页解决方案【课程介绍】 详细介绍数据库分页原理,自己动手封装前端分页组件,然后介绍第三方的js分页组件,集成laypage插件,了解各种分页模式,不管是跳转分页,数据库分页、前端分页、滚动加载分页、ajax数据分页、APP移动端分页、微信小程序分页等【课程目标】 掌握数据库分页原理,熟练使用JFinal操作数据库分页查
曼成 曼成
1年前
一文教你如何在小程序中快速接入验证码短信API
在微信小程序中接入验证码短信API,可以为用户提供便捷的验证服务。本文将详细介绍如何在小程序中实现这一功能,包括UI设计、API请求以及代码实现。