当前位置:   article > 正文

电商小程序实战之mpvue-weui简介及mock数据_expected method shorthand

expected method shorthand

一、Mpvue-WeUI是基于 mpvue 的一个小程序 UI 框架, 保留了 weui 的视觉规范,旨在提高小程序开发体验,同时让用户的使用感知更加统一。基于 Vue.js 的小程序开发框架,从底层支持 Vue.js 语法和构建工具体系。

微信小程序请求接口,官网第三方的网络请求库 fly,主要是小程序不支持ajax,所以flyio相当于在axios的基础上把这些兼容了.

引入

  1. var Fly=require("flyio/dist/npm/wx")
  2. var fly=new Fly

fly请求参数举例:get、post、多个并发请求

  1. fly.get('/user', {
  2. id: 133
  3. })
  4. .then(function (response) {
  5. console.log(response);
  6. })
  7. .catch(function (error) {
  8. console.log(error);
  9. });
  10. fly.post('/user', {
  11. name: 'Doris',
  12. age: 24
  13. phone:"18513222525"
  14. })
  15. .then(function (response) {
  16. console.log(response);
  17. })
  18. .catch(function (error) {
  19. console.log(error);
  20. });
  21. function getUserRecords() {
  22. return fly.get('/user/133/records');
  23. }
  24. function getUserProjects() {
  25. return fly.get('/user/133/projects');
  26. }
  27. fly.all([getUserRecords(), getUserProjects()])
  28. .then(fly.spread(function (records, projects) {
  29. //两个请求都完成
  30. }))
  31. .catch(function(error){
  32. console.log(error)
  33. })

本次项目中,在utils文件中写一个request.js

  1. import Fly from 'flyio/dist/npm/wx'
  2. const fly = new Fly()
  3. if (process.env.NODE_ENV === 'production') {
  4. // fly.config.baseURL = 'http://fancy1995.com/'
  5. fly.config.baseURL = 'http://yapi.demo.qunar.com/mock/22940/'
  6. } else {
  7. fly.config.baseURL = 'http://127.0.0.1:8080/'
  8. }
  9. export default fly

 在全局main.js中引入request并且定义,

  1. import request from './utils/request'
  2. Vue.prototype.$store = store
  3. Vue.prototype.$http = request

在之后使用的时候,直接使用this.$http则可进行网络请求

二、前端自己mock(使用yapi) yapi介绍

创建自己的第一个接口,设置post请求,设置前端给后台的query参数,再设置后台返回的参数

 运行结果是这样

但一定要注意

这个post的API要和预览里面的mock地址一样

 注意到yapi设置接口,选择数据为Number类型,但是自动生成的数据都是浮点数。对于这一点,需要自己在返回的数据里面,选取raw的输入方式,自己编写期待响应的数据。

3、编写代码中出现的一些报错,填坑

(1)一些关于eslint的报错;unexpect string concatennation

意思是ESLint总是推荐用ES6的Template String来拼接。而不要用+来连接

(2)Expected property shorthand  object-shorthand

let bar = 1111;

let obj = {bar:bar};   // error  报这个错

如何修改:

let obj = {bar:111}  // 使用最简单的方式,不要赋值给对象,在赋值到对象里面
假如需要形参传值,则写为如下:

  1. deleteAddress(addId) {
  2. const self = this
  3. this.$http.get('api/person/deleteAddress', {
  4. addId,
  5. })
  6. }

而不要写成addId:addId等。这样就会报此类错误。

(3)对于mpvue小程序?传参或者其他形式上的Url带参

 this.$http.get(`api/person/address/${addId}`)

不能用双引号,必须用Tab上面的那个符号

(4)missing trailing

缺少逗号

(5) expected  method shorthand

即把onload:function()简写为onload()\

(6)Missing radix parameter radix

parseInt的第二个参数有四种:2、8、10、16,分别对应二进制、八进制、十进制、十六进制;
默认是:十进制;在转换时可以忽略第二个参数,这样js照样可以运行,但是在你进行语法校验时,JSLint却会报错,这是因为压缩工具对语法的严谨性要求比较高,建议大家在用parseInt语法进行转换时,最好加个第二个参数;

4、mpvue-weui

确认删除该地址的时候需引入dialog组件

<img class="icon del" @click="openConfirm(addList.id)" src="../../images/del.png" alt="">

方法如下:

  1. openConfirm(addId) {
  2. const self = this
  3. wx.showModal({
  4. title: '确认删除吗',
  5. content: '',
  6. confirmText: '确认',
  7. cancelText: '取消',
  8. success(res) {
  9. console.log(res)
  10. if (res.confirm) {
  11. console.log('用户点击确认删除')
  12. self.$http.post('api/person/deleteAddress', {
  13. addId,
  14. })
  15. .then((resp) => {
  16. console.log(resp.data)
  17. })
  18. .catch((err) => {
  19. console.log(err)
  20. })
  21. } else {
  22. console.log('用户点击取消')
  23. },
  24. })
  25. },

5、onload和created生命周期的先后顺序

在mpvue小程序中,created早于onload

created在程序html页面加载之前,用于初始化页面数据

但是有时候需要从Url接收参数,这时需要onload,options就可以获取到传过来的参数。

  1. editAddress(addId) {
  2. wx.navigateTo({
  3. url: `/pages/editAddress/main?id=${addId}`,
  4. })
  5. },
  1. onLoad(options) {
  2. this.addId = options.id
  3. this.getPersonAddress(this.addId)
  4. },

用created 就是undefined,就是取不到id

6、去掉overflow-scroll的边框

overflow scroll 隐藏滚动条

  1. .nav {
  2. white-space: nowrap;
  3. overflow-x: scroll;
  4. height: 80rpx;
  5. line-height: 80rpx;
  6. display: flex;
  7. }
  8. .nav::-webkit-scrollbar {
  9. display: none; //Safari and Chrome
  10. }

7、实现tabbar

  1. <div class="nav">
  2. <div :class="{'selected':tab === 1,'testTitle':true}" @click="getPersonOrders(1)">待生产</div>
  3. <div :class="{'selected':tab === 2,'testTitle':true}" @click="getPersonOrders(2)">生产中</div>
  4. <div :class="{'selected':tab === 3,'testTitle':true}" @click="getPersonOrders(3)">待付款</div>
  5. <div :class="{'selected':tab === 4,'testTitle':true}" @click="getPersonOrders(4)">待发货</div>
  6. <div :class="{'selected':tab === 5,'testTitle':true}" @click="getPersonOrders(5)">已发货</div>
  7. <div :class="{'selected':tab === 6,'testTitle':true}" @click="getPersonOrders(6)">已完成</div>
  8. </div>
  9. <div v-if="tab===1" class="body">
  10. </div>
  11. <div v-else-if"tab===2" class="body">
  12. </div>
  13. ....

注意:用样式与否赋予值true 或者false,要给class前加:表示绑定。

js 控制语句如下:

  1. getPersonOrders(index) {
  2. this.tab = index
  3. console.log(this.tab)
  4. const self = this
  5. this.$http.post('api/person/order/process', {
  6. orderState: index || 1,
  7. })
  8. .then((resp) => {
  9. console.log(resp.data)
  10. self.products = resp.data.products
  11. })
  12. .catch((err) => {
  13. console.log(err)
  14. })
  15. },

不同的index,请求后台接口的时候,传递的orderState不同。

思考,在created 生命周期的时候,调用函数,传入参数,取得tab数字对应的订单信息(默认取tab=1)。

created在程序html页面加载之前,用于初始化页面数据

但是有时候需要从Url接收参数,这时需要onload,options就可以获取到传过来的参数。

  1. created() {
  2. this.getPersonOrders(this.tab)
  3. },
  4. onLoad(options) {
  5. console.log(options.tab)
  6. this.tab = parseInt(options.tab, 10)
  7. this.getPersonOrders(this.tab)
  8. },

但是从个人中心比如已发货点击进来,需要携带参数Tab为3,进来以后赋值给本页数据,然后本页面显示tab为3时候对应的数据信息。这个参数3只有在onLoad的时候才可以接收到,那么这样就需要在created 和onLoad都都调用getPersonOrder()

经测验:created函数中不调用getPersonOrder()不影响页面。也就是可以去掉created生命周期。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/菜鸟追梦旅行/article/detail/111616
推荐阅读
相关标签
  

闽ICP备14008679号