mpvue 引入其他ui框架怎样进入首页自动弹出授权框

在mpvue中如何优雅的封装ajax? - 知乎18被浏览<strong class="NumberBoard-itemValue" title="分享邀请回答const fetch = function(url, options = {}) {
const { method = "GET", body = {}, showError = true } = options;
return new Promise((resolve, reject) =& {
wx.request({
data: body,
"content-type": "application/json"
success: res =& {
if (showError) {
if (res.statusCode & 200 || res.statusCode & 300) {
return reject(res.data || {});
if (Number(res.data.status) !== 0) {
return reject(res.data || {});
return resolve(res.data || {});
complete: res =& {
113 条评论分享收藏感谢收起const request = (opts, cb) =& {
return new Promise((resolve, reject) =& {
wx.request({
success(res) {
opts.success(res)
resolve(res)
fail(err) {
opts.fail(err)
reject(err)
complete(res) {
cb && cb(res)
class Http {
constructor(opts) {
this.interceptors = {
request: () =& {},
response: () =& {}
if (opts) {
this.root = opts.root
this.header = opts.header
if(this.interceptors) {
this.interceptors.request = opts.interceptors.request
this.interceptors.response = opts.interceptors.response
const methodList = ['get', 'post', 'put', 'patch', 'delete']
const initConfig = {
header: {},
interceptors: {
response: () =& {},
request: () =& {}
methodList.forEach(item =& {
this[item] = (url, data, config = { interceptors: {} }) =& {
const mergedConfig = {
header: config['header'] ? config['header'] : this.header,
interceptors: {
response: config['interceptors'] && config['interceptors']['response'] ? config['interceptors']['response'] : this.interceptors.response,
request: config['interceptors'] && config['interceptors']['request'] ? config['interceptors']['request'] : this.interceptors.request,
const requestData = {
method: item.toUpperCase(),
url: this.root + url,
success: mergedConfig.interceptors.response,
fail: mergedConfig.interceptors.response,
header: mergedConfig.header
mergedConfig.interceptors.request(requestData)
return request(requestData)
module.exports = Http
使用const http = new Http()
http.root = PREFIX // 设置根路径
// 请求拦截
http.interceptors.request = (data) =& {
console.log('before request', data)
// 响应拦截
http.interceptors.response = (data) =& {
console.log('before response', data)
if (data.statusCode &= 500) {
toastErr('服务器错误')
// 设置全局请求头
http.header = {
http.post('/user', { name: 'music' }).then(res =& {})
1添加评论分享收藏感谢收起写回答1 个回答被折叠()mpvue的第一个小程序模板体验 - 简书
mpvue的第一个小程序模板体验
最近我手上用mpvue基于第三方平台开发的第一个模板小程序上线了,这里我在接着唠下我在开发过程中比较蛋疼的事情,有兴趣的可以一起吐槽下,或者指教一下。大神绕道。
首先我们来看下比较新的版本的mpvue里面做了哪些更新和修复。这个时候我们可以直接去看下package.json这个文件的更新状态
我们看到,在最新的依赖文件中,loader的版本已经更新了非常多(由于我算是比较早使用这个框架的),这说明我们美团的开发人员非常给力和重视,也说明我们的开发者朋友也非常的努力给意见,给99个赞。
在插件中,我发现有了webpack-mpvue-asset-plugin这个插件,说明多个子组件样式不能被服用的问题已经被收纳进去,所以我们不用再去自己安装这个插件了。
这里我说下我在开发中遇到的问题。
在开发中,封装网络需求对于我们来说是必不可少的一个行为,而我们大多数情况会采用promise去封装我们的异步请求,但是不知道为什么在早期版本中,我在使用promise的时候开发工具报没找到promise的错误,于是我就去安装了一个promise库,去支持promise的需求。
刚开始以为这样子做是解决问题了,但是到了项目的中后期,发现爆炸了。在我有次上传小程序的时候,报上传文件超过大小(vender.js)的错误,以至于无法上传。
my god.那么是什么引起这个问题的呢,当时有那么几种可能: 1.引用了第三方库,导致打包进去的文件过大 2.图片过多。随之可能性确定在了第一种,那就是第三方库的引用。因为当时除了引用promise库以外,我还引用了mockjs以便我去模拟数据。
这里也要提示的一点,就是引用mockjs的时候,你使用@去生成随机数据的时候可能会报错,这个问题我目前没找到,只知道可以在对应方法加个参数或者用Random.XXXX就可以了。
言归正传,当时我的第一个想法就是引用了promise库的原因导致的,所以当时我就纳闷了,不用promise肯定是不现实的,可是用了就文件过大,这就说明一个问题,小程序本身应该是支持promise才对的!于是向官方人员以及大神得到了求证。那么问题又来了,明明是支持的,为毛我的会报错啊,cao。不小心一鸡冻又想到了,webpack!babel!然后又去屁颠屁颠跑去找大神要了他的babelrc和package.json看了下,果然如此。然后我又开始了新的一轮删除和安装插件,主要两个插件如下,然后问题解决了。这里具体安装过程不多说,百度上都有的呢。
这里再说下,我们的微信开发者工具中的项目设置中,你可以把 es6 这一项给去掉,因为我们mpvue在打包的过程中已经帮我们编译好了,因此不用重复次操作。
还有个问题,就是mpvue中,页面的切换,可能不能及时清空页面的数据,这里我们需要在onUnload里面去自己清楚一下。其实我觉得这个操作还蛮简单的,写个方法初始化下数据就好了。
还有一个这样的场景: 用户在A页面点击进入B页面,点击左上角物理返回键的时候想进入C页面。现在我采用的方式是在B页面的onUnload函数中使用wx.redirectTo这个方法去帮助跳转,这样基本能满足我的要求,但是会有个'界面后退然后自动切换'的一个效果,我觉得这样用户体验不太好,希望有不一样的解决方式,请告知,感激不敬!!!!(膜拜)
这里说最后一个碰到的小问题。我开发的项目中会有一个通过微信端生成的二维码图分享小程序的功能。微信接口要求提供对应页面的路径以及要携带的参数,并且对参数的要求和长度做了限制。按照业务场景需求我对携带的参数只要传字符串 '1,2'就足够了,那么我在对应页面的onload函数中的参数可以拿到这个数据,再使用
split 这个api转换成数组并且进行处理就可以了。然后错就错在我想以为然。测试中一直在这个环节上报错!
懵逼,why?经过排查发现,是拿到的数据和处理方式有问题。原来,在option(形参).scene中拿到的并不是我传给服务器的'1,2'中, ',' 被转义了!wtf。 于是,我们用decodeURIComponent就可以转义转回来了。这个算是栽在自己大意上了。
至于最上面提到的依赖问题,我现在还是找不出真正的原因-为什么当时不支持promise呢?因为现在我使用的是更新后的版本,正确的babelrc就是QuickStart里面的那个,所以不用再担心这个问题。还有在下在这给点建议,在使用mpvue的时候请先去读下官方文档,因为我发现有很多刚参与进来的开发者问的问题,明显在文档上是有注明的。我感觉如果不做好准备工作的话,是在加大自己的时间成本。
至于其它问题,本人目前还没有发现,如果发现有意义的问题,我会再分享出来。
用两张图告诉你,为什么你的 App 会卡顿? - Android - 掘金 Cover 有什么料? 从这篇文章中你能获得这些料: 知道setContentView()之后发生了什么? ... Android 获取 View 宽高的常用正确方式,避免为零 - 掘金 相信有很多...
pdf下载地址:Java面试宝典 第一章内容介绍 20 第二章JavaSE基础 21 一、Java面向对象 21 1. 面向对象都有哪些特性以及你对这些特性的理解 21 2. 访问权限修饰符public、private、protected, 以及不写(默认)时的区别(201...
用到的组件1、通过CocoaPods安装项目名称项目信息AFNetworking网络请求组件FMDB本地数据库组件SDWebImage多个缩略图缓存组件UICKeyChainStore存放用户账号密码组件Reachability监测网络状态DateTools友好化时间MBP...
用到的组件1、通过CocoaPods安装项目名称项目信息AFNetworking网络请求组件FMDB本地数据库组件SDWebImage多个缩略图缓存组件UICKeyChainStore存放用户账号密码组件Reachability监测网络状态DateTools友好化时间MBP...
用到的组件 1、通过CocoaPods安装项目名称项目信息 AFNetworking网络请求组件 FMDB本地数据库组件 SDWebImage多个缩略图缓存组件 UICKeyChainStore存放用户账号密码组件 Reachability监测网络状态 DateTools友...
身体是你自己的,不是谁的 泱泱大国,时代施予压力,更多人关注的不是健康,而是挣钱;更多人关注的不是精神,而是物质。缺失幸福,远离健康,未及衰老,病痛缠身,悔之已来不及,终究身体是你自己的,想想这值得吗? 望己事业有成、某日暴富,却忘了健康。 男人的事业心都特别强,总以...
《杂曲歌辞o游子吟》 孟郊 慈母手中线,游子身上衣。临行密密缝,意恐迟迟归。谁言寸草心,报得三春晖。 这首诗写得真好。 “慈母手中线,游子身上衣”,句子对仗,而用词极为直白朴素,读来有一种敦厚真诚的感觉。 后面两句中,叠词用得妙。 “临行密密缝,意恐迟迟归”。 “密密”讲的...
要下雨了,身体已报告了。从下午阴天开始,腰就不太舒服,各个关节也有些隐隐作痛。
以前,经常听别人说,一阴天下雨就能感觉到,身体比天气预报准,那时我是不信的,因为体会不到。今年体会到了。
一年来,没有做运动。也不知道忙什么,整天累得腰酸背痛。几天前,腰椎...
金庸的《神雕侠侣》,有很多故事场景,而这些场景的故事,很多让我铭记于心,比如在那活死人墓之中,小龙女和杨过的故事,还有在绝情谷,小龙女在深坛之下,在悬崖之上的杨过,和他们之间的16年约定。
终南山下,活死人墓,神雕侠侣,绝迹江湖。看完《神雕侠侣》之后,我心情难以...
虽然是个很热的秋天,但也是个丰收的季节. 画点水果……是的……画完之后我都给吃了,不浪费 #Hello October#Vue.js开发mpvue框架步骤详解-js教程-PHP中文网QQ群微信公众号还没有收藏Vue.js开发mpvue框架步骤详解这次给大家带来Vue.js开发mpvue框架步骤详解,Vue.js开发mpvue框架的有哪些,下面就是实战案例,一起来看一下。前言mpvue是一款使用Vue.js开发微信小程序的前端框架。使用此框架,开发者将得到完整的 Vue.js 开发体验,同时为H5和小程序提供了代码复用的能力。如果想将 H5 项目改造为小程序,或开发小程序后希望将其转换为H5,mpvue将是十分契合的一种解决方案。目前,mpvue已经在美团点评多个实际业务项目中得到了验证,因此我们决定将其开源,希望更多技术同行一起开发,应用到更广泛的场景里去。github项目地址请参见mpvue 。使用文档请参见 。为了帮助大家更好的理解mpvue的架构,接下来我们来解析框架的设计和实现思路。文中主要内容已经发表在《程序员》杂志2017年第9期小程序专题封面报道,内容略有修改。小程序开发特点微信小程序推荐简洁的开发方式,通过多页面聚合完成轻量的产品功能。小程序以离线包方式下载到本地,通过微信客户端载入和启动,简洁,技术封装彻底,自成开发体系,有Native和H5的影子,但又绝不雷同。小程序本身定位为一个简单的逻辑视图层框架,官方并不推荐用来开发复杂应用,但业务需求却难以做到精简。复杂的应用对开发方式有较高的要求,如组件和模块化、自动构建和集成、代码复用和开发效率等,但小程序开发规范较大的限制了这部分能力。为了解决上述问题,提供更好的开发体验,我们创造了mpvue,通过使用Vue.js来开发微信小程序。mpvue是什么mpvue是一套定位于开发小程序的前端开发框架,其核心目标是提高开发效率,增强开发体验。使用该框架,开发者只需初步了解小程序开发规范、熟悉Vue.js基本语法即可上手。框架提供了完整的 Vue.js 开发体验,开发者编写Vue.js代码,mpvue 将其解析转换为小程序并确保其正确运行。此外,框架还通过 vue-cli 工具向开发者提供quick start 示例代码,开发者只需执行一条简单命令,即可获得可运行的项目。为什么做mpvue在小程序内测之初,我们计划快速迭代出一款对标 H5 的产品实现,核心诉求是:快速实现、代码复用、低成本和高效率… 随后经历了多个小程序建设,结合业务场景、技术选型和小程序开发方式,我们整理汇总出了开发阶段面临的主要问题:组件化机制不够完善代码多端复用能力欠缺小程序框架和团队技术栈无法有机结合小程序学习成本不够低组件机制:小程序逻辑和视图层代码彼此分离,公共组件提取后无法聚合为单文件入口,组件需分别在视图层和逻辑层引入,维护性差;组件无机制,事件回调必须设置为,组件设计有命名冲突的风险,数据封装不强。开发者需要友好的代码组织方式,通过 ES 模块一次性导入;组件数据有良好的封装。成熟的组件机制,对工程化开发至关重要。多端复用:常见的业务场景有两类,通过已有 H5 产品改造为小程序应用或反之。从效率角度出发,开发者希望通过复用代码完成开发,但小程序开发框架却无法做到。我们尝试过通过静态代码分析将 H5 代码转换为小程序,但只做了视图层转换,无法带来更多收益。多端代码复用需要更成熟的解决方案。引入 Vue.js:小程序开发方式与 H5 近似,因此我们考虑和 H5 做代码复用。沿袭团队技术栈选型,我们将 Vue.js 确定为小程序开发规范。使用 Vue.js 开发小程序,将直接带来如下开发效率提升:H5 代码可以通过最小修改复用到小程序使用 Vue.js 组件机制开发小程序,可实现小程序和 H5 组件复用技术栈统一后小程序学习成本降低,开发者从 H5 转换到小程序不需要更多学习Vue.js 代码可以让所有前端直接参与开发维护为什么是 Vue.js?这取决于团队技术栈选型,引入新的选型与统一技术栈和提高开发效率相悖,有违开发工具服务业务的初衷。mpvue 的演进mpvue的形成,来源于业务场景和需求,最终方案的确定,经历了三个阶段。第一阶段:我们实现了一个视图层代码转换工具,旨在提高代码首次开发效率。通过将H5视图层代码转换为小程序代码,包括 HTML 标签映射、Vue.js 模板和样式转换,在此目标代码上进行二次开发。我们做到了有限的代码复用,但组件化开发和小程序学习成本并未得到有效改善。第二阶段:我们着眼于完善代码组件化机制。参照 Vue.js 组件规范设计了代码组织形式,通过代码转换工具将代码解析为小程序。转换工具主要解决组件间数据同步、关联和命名空间问题。最终我们实现了一个 Vue.js 语法子集,但想要实现更多特性或跟随 Vue.js 版本迭代,工作量变得难以估计,有永无止境之感。第三阶段:我们的目标是实现对 Vue.js 语法全集的支持,达到使用 Vue.js 开发小程序的目的。并通过引入 Vue.js runtime 实现了对 Vue.js 语法的支持,从而避免了人肉语法适配。至此,我们完成了使用 Vue.js 开发小程序的目的。较好地实现了技术栈统一、组件化开发、多端代码复用、降低学习成本和提高开发效率的目标。mpvue设计思路Vue.js 和小程序都是典型的逻辑视图层框架,逻辑层和视图层之间的工作方式为:数据变更驱动视图更新;视图交互触发事件,事件响应函数修改数据再次触发视图更新,如图1所示。图1: 小程序实现原理鉴于 Vue.js 和小程序一致的工作原理,我们思考将小程序的功能托管给 Vue.js,在正确的时机将数据变更同步到小程序,从而达到开发小程序的目的。这样,我们可以将精力聚焦在 Vue.js 上,参照 Vue.js 编写与之对应的小程序代码,小程序负责视图层展示,所有业务逻辑收敛到 Vue.js 中,Vue.js 数据变更后同步到小程序,如图2所示。如此一来,我们就获得了以 Vue.js 的方式开发小程序的能力。Vue代码 - 将小程序页面编写为 Vue.js 实现 - 以 Vue.js 开发规范实现父子组件关联小程序代码 - 以小程序开发规范编写视图层模板 - 配置生命周期函数,关联数据更新调用 - 将 Vue.js 数据映射为小程序数据模型并在此基础上,附加如下机制 - Vue.js 实例与小程序 Page 实例建立关联 - 小程序和 Vue.js 生命周期建立映射关系,能在小程序生命周期中触发 Vue.js 生命周期 - 小程序事件建立代理机制,在事件代理函数中触发与之对应的 Vue.js 组件事件响应这套机制总结起来非常简单,但实现却相当复杂。在揭秘具体实现之前,读者可能会有这样一些疑问:要同时维护 Vue.js 和小程序,是否需要写两个版本的代码实现?小程序负责视图层展现,Vue.js的视图层是否还需要,如果不需要应该如何处理?生命周期如何打通,数据同步更新如何实现?上述问题包含了 mpvue 框架的核心内容,下文将仔细为你道来。首先,mpvue 为提高效率而生,本身提供了自动生成小程序代码的能力,小程序代码根据 Vue.js 代码构建得到,并不需要同时开发两套代码。Vue.js 视图层渲染由 render 方法完成,同时在内存中维护着一份虚拟 DOM,mpvue 无需使用 Vue.js 完成视图层渲染,因此我们改造了 render 方法,禁止视图层渲染。熟悉源代码的读者,都知道 Vue runtime 有多个平台的实现,除了我们常见的 Web 平台,还有 Weex。从现在开始,我们增加了新的平台 mpvue。生命周期关联:生命周期和数据同步是 mpvue 框架的灵魂,Vue.js 和小程序的数据彼此隔离,各自有不同的更新机制。mpvue 从生命周期和事件切入,在 Vue.js 触发数据更新时实现数据同步。小程序通过视图层呈现给用户、通过事件响应用户交互,Vue.js 在后台维护着数据变更和逻辑。可以看到,数据更新发端于小程序,处理自 Vue.js,Vue.js 数据变更后再同步到小程序。为实现数据同步,mpvue 修改了 Vue.js runtime 实现,在 Vue.js 的生命周期中增加了更新小程序数据的逻辑。事件代理机制:用户交互触发的数据更新通过事件代理机制完成。在 Vue.js 代码中,事件响应函数对应到组件的 method, Vue.js 自动维护了上下文环境。然而在小程序中并没有类似的机制,又因为 Vue.js 执行环境中维护着一份实时的虚拟 DOM,这与小程序的视图层完全对应,我们思考,在小程序组件节点上触发事件后,只要找到虚拟 DOM 上对应的节点,触发对应的事件不就完成了么;另一方面,Vue.js 事件响应如果触发了数据更新,其生命周期函数更新将自动触发,在此函数上同步更新小程序数据,数据同步也就实现了。mpvue如何使用mpvue框架本身由多个npm模块构成,入口模块已经处理好依赖关系,开发者只需要执行如下代码即可完成本地项目创建。# 安装 vue-cli
$ npm install --global vue-cli
# 根据模板项目创建本地项目,目前为内网地址
$ vue init ‘bitbucket:xxx.meituan. com:hfe/mpvue-quickstart&#39; --clone my- project
# 安装依赖和启动自动构建
$ cd my-project
$ npm install
$ npm run dev执行完上述命令,在当前项目的 dist 子目录将构建出小程序目标代码,使用小程序开发者工具载入 dist 目录即可启动本地调试和预览。示例项目遵循 Vue.js 模板项目规范,通过Vue.js 命令行工具vue-cli创建。代码组织形式与 Vue.js 官方实例保持一致,我们为小程序定制了 Vue.js runtime 和 webpack 加载器,此部分依赖也已经内置到项目中。针对小程序开发中常见的两类代码复用场景,mpvue 框架为开发者提供了解决思路和技术支持,开发者只需要在此指导下进行项目配置和改造。我们内部实践了一个将 H5 转换为小程序的项目,下图为使用 mpvue 框架的转换效果:图3: H5 和小程序转换效果将小程序转换为H5:直接使用 Vue.js 规范开发小程序,代码本身与H5并无不同,具体代码差异会集中在平台 Api 部分。此外并不需明显改动,改造主要分如下几部分:将小程序平台的 Vue.js 框架替换为标准 Vue.js将小程序平台的 vue-loader 加载器替换为标准 vue-loader适配和改造小程序与 H5 的底层 Api 差异将H5转换为小程序:已经使用 Vue.js 开发完 H5,我们需要做的事情如下:将标准 Vue.js 替换为小程序平台的 Vue.js 框架将标准 vue-loader 加载器替换为小程序平台的 vue-loader适配和改造小程序与 H5 的底层 Api 差异根据小程序开发平台提供的能力,我们最大程度的支持了 Vue.js 语法特性,但部分功能现阶段暂时尚未实现。表1: mpvue 暂不支持的语法特性项目转换注意事项:框架的目标是将小程序和 H5 的开发方式通过 Vue.js 建立关联,达到最大程度的代码复用。但由于平台差异的客观存在(主要集中在实现机制、底层Api 能力差异),我们无法做到代码 100% 复用,平台差异部分的改造成本无法避免。对于代码复用的场景,开发者需要重点思考如下问题并做好准备:尽量使用平台无的语法特性,这部分特性无需转换和适配成本避免使用不支持的语法特性,譬如 slot, filter 等,降低改造成本如果使用特定平台 Api ,考虑抽象好适配层接口,通过切换底层实现完成平台转换mpvue 最佳实践在表2中,我们对微信小程序、mpvue、WePY 这三个开发框架的主要能力和特点做了横向对比,帮助大家了解不同框架的侧重点,结合业务场景和开发习惯,确定技术方案。对于如何更好地使用 mpvue 进行小程序开发,我们总结了一些最佳实践。使用 vue-cli 命令行工具创建项目,使用Vue 2.x 的语法规范进行开发避免使用框架不支持的语法特性,部分 Vue.js语法在小程序中无法使用,尽量使用 mpvue 和 Vue.js 共有特性合理设计数据模型,对数据的更新和操作做到细粒度控制,避免性能问题合理使用组件化开发小程序,提高代码复用率表2: 框架使用特点对比结语mpvue 框架已经在业务项目中得到实践和验证,目前正在美团点评内部大范围使用。mpvue 来源于开源社区,饮水思源,我们也希望为开源社区贡献一份力量,为广大小程序开发者提供一套技术方案。mpvue 的初衷是让 Vue.js 的开发者以低成本接入小程序开发,做到代码的低成本迁移和复用,我们未来会继续扩展现有能力、解决开发者的诉求、优化使用体验、完善周边生态建设,帮助到更多的开发者。最后,mpvue 基于 Vue.js 源码进行二次开发,新增加了小程序平台的实现,我们保留了跟随 Vue.js 版本升级的能力,由衷的感谢 Vue.js 框架和微信小程序给业界带来的便利。相信看了本文案例你已经掌握了方法,更多精彩请关注php中文网其它相关文章!推荐阅读:以上就是Vue.js开发mpvue框架步骤详解的详细内容,更多请关注php中文网其它相关文章!共3篇246点赞收藏分享:.php.cn&猜你喜欢PHP中文网:独家原创,永久免费的在线,php技术学习阵地!
All Rights Reserved | 皖B2-QQ群:关注微信公众号美团小程序框架mpvue入门教程
时间: 22:42:54
&&&& 阅读:113
&&&& 评论:
&&&& 收藏:0
标签:&&&&&&&&&&&&&&&&&&&&&&&&&&&
另外,我还专门为本文做了一个简单的项目,如果懒得从头开始搭项目的童鞋,可以直接去我的 上克隆到本地, 安装一下依赖,即可直接在此基础在开发,不需要做任何配置。如果你觉得该项目对有帮助, 请顺便给我Star,你们的支持是我最大的动力,谢谢!
好了,我们进入主题,首先,请允许引用一下美团官方对mpvue的介绍
mpvue是一个使用 Vue.js 开发小程序的前端框架。框架基于 Vue.js 核心,mpvue 修改了 Vue.js 的 runtime 和 compiler 实现,使其可以运行在小程序环境中,从而为小程序开发引入了整套 Vue.js 开发体验。
使用 mpvue 开发小程序,你将在小程序技术体系的基础上获取到这样一些能力:
彻底的组件化开发能力:提高代码复用性
完整的 Vue.js 开发体验
方便的 Vuex 数据管理方案:方便构建复杂应用
快捷的 webpack 构建机制:自定义构建策略、开发阶段 hotReload
支持使用 npm 外部依赖
使用 Vue.js 命令行工具 vue-cli 快速初始化项目
H5 代码转换编译成小程序目标代码的能力
学习最好的方式就动手,我们就徒手撸一个demo项目出来跑一跑,看看到底有没有官方说的那么好。 如果你有过vue的开发经历,相信你会对这个过程非常熟悉,甚至你都不需要安装其他工具, 直接用vue-cli创建项目,如果你一起没安装过vue-cli,那么你要先运行一下命令
npm install --g vue-cli
安装完vue-cli以后,我们就可以运行一下命令,来自动构建一个项目(期间会询问你是否使用一些工具/插件, 请根据自己的实际情况选择y或n,对于不懂得该选y还是n的,统统选n)
vue init mpvue/mpvue-quickstart test-wxapp
然后 进入我们创建的项目,并安装依赖
cd test-wxapp
最后,在运行一下我们的开发服务
npm run dev
项目就跑起来了,这个时候,我们打开微信开发者工具,选择小程序,然后新建一个,项目目录填 我们项目目录下的dist目录 test-wxapp/dist,就可以看到效果了
到此为止,一个基本的项目就完成了,但是,本文的目的不是让你学会搭一个空项目的,空项目的话,我觉得官方教程做的已经够好了。 接下来,我们来删掉几个示例文件,然后一步步添加页面. 首先,我们看一下项目的配置文件 /src/main.js 里面的初始内容如下:
import Vue from ‘vue‘
import App from ‘./App‘
Vue.config.productionTip = false
App.mpType = ‘app‘
const app = new Vue(App)
app.$mount()
export default {
// 这个字段走 app.json
// 页面前带有 ^ 符号的,会被编译成首页,其他页面可以选填,我们会自动把 webpack entry 里面的入口页面加进去
pages: [‘pages/logs/main‘, ‘^pages/index/main‘],
backgroundTextStyle: ‘light‘,
navigationBarBackgroundColor: ‘#fff‘,
navigationBarTitleText: ‘WeChat‘,
navigationBarTextStyle: ‘black‘
这里的 config 字段下面的内容,就是整个小程序的全局配置了,其中pages是页面的路由,window则是页面的一些配置(大部分都是顶部栏的配置) ,这些配置,最终都会被打包到原生小程序的app.json,对这些配置不了解的,建议看一下微信方法的小程序文档,这里不做赘述。
我们先把/src/pages 下面的counter和logs两个文件夹删掉,只保留一个index ,顺便把 /src/components 文件夹下面的文件也全删掉, 然后把/src/main.js 里面的 config.pages里面多余的路由也删掉,只保留一条[‘^pages/index/main‘],这样目前就只有个index页面,
然后我们打开/src/pages/index/index.vue 我们把里面多余的代码删掉,只保留一个基础骨架
&template&
&div class="container"&
&/template&
export default {
return { }
methods: {},
created () {}
&style scoped&
tip /src/utils/index.js 是一个公共函数库,里面只有一个简单的格式化日期函数,不要也可以删掉
到目前为止,一个干净的空项目就算是ok了,接下来我们来对微信原生的一些反人类的东西来做一下优化。
一、先用mptoast组件代替官方提供的wx.showToast, wx.showToast诸多不便我就不说了,关键是还有坑 小程序基础库比较低的,不管你怎么设置,总是会在弹窗里面加一个钩钩,有时候我想弹出错误消息也是打钩, 严重误导用户,字数上还有限制有带icon的不能超过7个字,你说说,你说说 7个字够干嘛的, 那我们来看看mptoast,据mptoast具有轻量,配置少,冗余少,使用简单,可定制性强等特点
我们开根据官方介绍,从npm引入并配置
npm i vuex
npm i mptoast -D
在项目的主配置文件(一般位于src/main.js)加入以下代码
import mpvueToastRegistry from ‘mptoast/registry‘
mpvueToastRegistry(Vue)
在你需要弹窗的页面,引入组件,并注册,然后在页面内加入一个你注册的组件,就可以在js里面调用this.$mptoast()了, 以下是一个简单的实例
&template&
&-- 省略其他代码 --&
&mptoast /&
&/template&
import mptoast from ‘mptoast‘
export default {
components: {
methods: {
showToast () {
this.$mptoast(‘我是提示信息‘)
使用起来还是蛮简单的
二,用promise封装异步请求函数 在小程序的环境下面,要想发送一个外部请求,我们只能使用小程序官方提供的wx.request方法, 但是该方法的代码风跟跟Jquery年代的Ajax一样,都散靠回调来处理请求响应,如果有很多层回调, 就会有很多层嵌套,这让我们这些平时被async-await惯坏的人怎么接受?
所以,建完基本项目,我们要做的第一件事,就是用wx.request自己封装一个基于promise的异步请求方法。 我们先来看一下 wx.request的一个官方示例代码
wx.request({
url: ‘test.php‘, //仅为示例,并非真实的接口地址
‘content-type‘: ‘application/json‘ // 默认值
success: function(res) {
console.log(res.data)
可以看到,每次请求都要发送一大堆的东西,重点少这些东西里面,很可能对于一个项目来说, 绝大部分都是固定不变的,那这样,不是冗余了么。
tip: 更多wx.request参数,请参考
我们分析一下,第一个参数是url,也就是我们请求的地址,这个应该是每次都不一样的,但是,不一样的应该也只是url的最后一部分, 接口名称的位置不一样,前面的服务器地址一般都是一样的,例如http://www.abc.com/api/member/login 对于同一个项目的所有接口 服务器地址http://www.abc.com/api/应该都是一样的,不一样的只是后妈的接口名称member/login, 那我们可以把url拆分成 服务器地址 + 接口名称,这样做也方便后期上线的时候,切换服务器地址。
第二个参数是请求的参数,请求的参数应该是每次都不一样的,所以这个我们就不做修改(事实上实际应用中, 经常有可能出现需要每个接口都带一个token的,我们也可以在这里统一加上去,不过这里就不做深入)
第三个参数是 请求头,这个一般同一个项目里面,这些都是一样的,所以我们就写死。 这里还有一个参数method请求方法, 这里因为使用默认值GET,所以就没列出,我们这边需要做设置,因为现在前后分离的模式,现在基本上大部分都是POST请求,所以我们这边也写死成method:‘POST‘
最后一个就是处理请求结果回调函数,示例里面只有一个请求成功的回调,其实我们应该再加一个请求实例的处理函数, fail,而我们封装这个函数的重点,就是要用promise来处理这两个回调函数,使它们可以用async-await的语法
// 假设以下代码在 `/src/utils/requestMethod.js`
let serverPath = ‘http://www.abc.com/api/‘
export function post(url,body) {
return new Promise((resolve,reject) =& {
wx.request({
url: serverPath + url
// 拼接完整的url
data: body
method:‘POST‘,
‘content-type‘: ‘application/json‘
success(res) {
resolve(res.data)
// 把返回的数据传出去
fail(ret) {
reject(ret)
// 把错误信息传出去
有了这样的封装,我们就可以在其他地方引入 上面这个文件,然后使用post函数请求
import {post} from ‘/src/utils/requestMethod.js‘
// 需要注意的是,这行代码必须要在async修饰的函数里面才能正确调用
let res = await post(‘member/login‘,{name:myname})
如果你觉得每次都要import这个文件很麻烦,那我们也可以把它挂在到Vue(mpvue)的原型(prototype)上,我们打开/src/main.js文件,然后在里面加入以下代码
import {post} from ‘/src/utils/requestMethod.js‘
Vue.prototype.$post = post
这样,我们就可以在Vue(mpvue)的所有实例里面,直接使用 this.$post()来调用,只要一行代码,
// 这行代码同样需要在async修饰的函数里面才能正确调用
let res = await this.$post(‘member/login‘,{name:myname})
怎么样?是不是比原生的方便很多呢?
当然,跑起来以后,你可能还会遇到各种问题,这里我有对我自己遇到的问题做了一些总结 ,希望对你有帮助, 还有也是很不错的哦
作者:noahlam链接:https://juejin.im/post/5ac31e8d6fb9a028d9375765来源:掘金著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。标签:&&&&&&&&&&&&&&&&&&&&&&&&&&&原文地址:https://www.cnblogs.com/noahlam/p/8910012.html
&&国之画&&&& &&&&chrome插件
版权所有 京ICP备号-2
迷上了代码!}

我要回帖

更多关于 mpvue 引入ui框架 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信