微信小程序黑马优购遇到的问题和心得

案列学习

如果不想在consolo中输出

可以在中为项目设置 这个属性

 

  1. Flex

如果一行放不下 第二个可以让他们换行

默认横向布局现在改为纵向布局

  align-items: center;

  justify-content: center;

  改为水平垂直居中

  justify-content: space-around;

均匀分配周围的空间

完美居中

display: flex;

  flex-wrap: wrap;

  justify-content: space-around;

  1. 给类似这种css盒子每个都加边框线 但是又不重复

技巧

首先给外面大盒子加上 上和左边框线

然后给里面每一个小盒子加上一个右和下边框线这样就会每一个盒子都会有边框线

  1. 给view和文字设置好看的样式

text-shadow: 0 0 5px #fff;

  box-shadow: 1rpx 1rpx 6rpx #aaa;

  1. 动态设置页面标题

    wx.setNavigationBarTitle({

      title:this.data.title

    })

  1. 触发弹窗

wx.showToast({

        title: 'count:'+this.data.count

        // icon:"none"  //可以设置是否有弹窗图标

      })

  1. 直接在字符串中使用传过来的参数

"r,g,b":function(newr,newg,newb){

      this.setData({

        rgb:`${newr},${newg},${newb}`      //注意这里是大括号 !!!

      })

    }

8.自定义tabBar

(1)配置文件  //从这以后代码自动渲染自定义tabBar

 app.json 中的 tabBar 项指定 custom 字段,同时其余 tabBar 相关配置也补充完整。

所有 tab 页的 json 里需声明 usingComponents 项,也可以在 app.json 全局开启。

{

  "tabBar": {

    "custom": true,  //添加这一行代 声明进行自定义tabBar

    "color": "#000000",

    "selectedColor": "#000000",

    "backgroundColor": "#000000",

    "list": [{

      "pagePath": "page/component/index",

      "text": "组件"

    }, {

      "pagePath": "page/API/index",

      "text": "接口"

    }]

  },

  "usingComponents": {}}

(2)添加 tabBar 代码文件  

在代码根目录中创建一下文件

(3)去Vant Weapp寻找自定义样式

(4) 给自己定义页面设置跳转tabBar

onChange(event) {

      console.log(event);

      this.setData({ active: event.detail });

  //跳转路由  在这里设置跳转tabBar的路由

      wx.switchTab({

        url: this.data.list[event.detail].pagePath,

      })

    },

9.设置全屏滚动窗高度

1.数据里面设置高度变量 wh:0

2.在页面刚加载的时候调用uniapi

onLoad(){

const sysInfo=uni.getSystemInfoSync()

this.wh=sysInfo.windowHeight

}

3.在对应的scroll-view 标签里面设置动态style

:style="{height: wh+'px'}"

10.返回数据结构+数据重命名

async getCateList(){

const {data:res}=await uni.$http.get("/api/public/v1/categories")

console.log(res);

}

11.动态定义选中的框

实现这种效果

1.创建一个active 变量

2.在标签里面设置动态class

:class="['left-scroll-view-item',i==active?'active':'']"

  1. 通过点击事件方法来修改变量达到这种效果

12水平垂直居中样式

display: flex;

flex-direction: column;

justify-content: center;

align-items: center;

  1. scroll-view重置scroll-top 来增强用户体验感的方法
  1. 定义scrollTop数据
  2. 给标签添加动态属性

<scroll-view :scroll-top="scrollTop">

  1. 通过方法的动态给scrollTop设置值来使scroll-top属性重置
  2. 大坑 当scrollTop前后要改变的值是相同的时候 页面效果不变 所以进行小技巧 运用三元运算来使scrollTop的值动态改变 改变的值为1或者0这样就可以动态重置 1像素点改变用户是感觉不到的

this.scrollTop=this.scrollTop===0?1:0

  1. 设置吸顶样式

position: sticky;

top:0;

z-index: 999;

15.防抖处理

在data中定义一个数据timer:null

16.美化搜索结果内容及文本超出用...替代

.sugg-list{

padding: 0 5px;

.sugg-item{

display: flex;

// 弹性盒子纵向居中

align-items: center;

// 弹性盒子两端对齐

justify-content: space-between;

font-size: 12px;

padding: 13px 0;

border-bottom: 1px solid #efefef;

.goods-name{

// 文本不换行

white-space: nowrap;

// 超出隐藏

overflow: hidden;

// 超出的用...表示

text-overflow: ellipsis;

}

}

}

17.搜索栏历史记录的小细节 去除冗余项

通过set函数来使里面的 新增加的历史搜索记录放在最前面 且不会冗余

const set=new Set(this.historuList)

//删除冗余的历史记录

set.delete(this.kw)

//将set对象转换为数组

this.historuList=Array.from(set)

//将新增加的数据添加到数组中

this.historuList.unshift(this.kw)

  1. 数据持久化本地  //应用于历史搜索啦那种

存入

uni.setStorageSync(

"kw",JSON.stringify(this.historuList)

)

读取

this.historuList = JSON.parse(uni.getStorageSync("kw")||'[]')

  1. view里面的内容 上下两边排列

// 将内容纵向排列

//将内容两边对齐 上头下头对齐

20.使用过滤器给数字加上两位小数点

与data平齐 设置toFixed过滤函数

调用的时候巨简单

21.通过展开运算符进行数据的拼接

获取更多数据的时候贼好使

22.下来获取更多数据

进行数据的拼接

23函数形参 默认值的方法

这是方法一

巨好使 而且如果不赋值的话就是默认的定义这种情况 如果赋值参数的话 那么这个默认值就会改变

uni.$showMsg=function(title="数据加载失败!",duration=1500){

uni.showToast({

title,

duration,

icon:"none"

})

}

方法二

23.传递回调函数 并判断是否存在 如果存在就运行 不存在的话就过 最简单的方法

1.定义传参的函数

2.调用函数

关键语句贼好使

24.json数据的快速定义 es6语法

 快速传参

25.图片预览 类似于淘宝拼多多那种预览形式

uni.previewImage({

//预览时显示第几张图片

current:i,

//预览时显示的图片数组

urls:this.goods_info.pics.map(x=>x.pics_big)

})

26.给图片去除间隙

html里面是直接给图片加display:block 属性

小程序可以用 rich-text nodes 渲染html标签的时候可以直接在标签属性里面加 style设置

  1. replace 替换规则

replace(/<img /g,'<img style="display:block;"')

  1. ios手机显示webp图片无法正常显示

需要将通过正则将webp改为ipg

29.解决文本闪烁问题 通常是没有数据 后加载数据造成的这种情况

给外面的view设置 v-if 属性 判断有没有这个数据 有的话显示 没有的话就隐藏

30.调用文件根目录

./当前光标位置

@/跟目录

30.vue find函数

返回的是查找对象

  1. watch可以监听  computed 计算属性

32.find函数来增加代码可维护性

const findResult=this.options.find(x=>x.text==='购物车') 这样查找数据而不是直接从数组下标拿去 可以增加代码可维护性 防止以后添加属性 数据不好更改

33.watch数据监听器在页面刚加载的时候就调用一次的方法immdediate handler

34.设置tabBar数字角标

  1. 抽离为mixins
  2. 数据赋值错误不停地报 SyntaxError: Unexpected end of JSON input错误

这种情况肯定是赋值错误 数据类型不对!!!!

cart:JSON.parse(uni.getStorageSync('cart'))||[]  //这里写错了

当查找JSON.parse(uni.getStorageSync('cart'))不存在时 就选择赋值为[] 这样是错的 会赋值失败的

正确的用法是

cart: JSON.parse(uni.getStorageSync('cart') || '[]'),

37.无法保证变量是数字类型的解决方法

在变量前加一个加号+

或者是减零-0

38.filter函数的筛选骚操作

state.cart=state.cart.filter(x=>x.goods_id!==goods)

将不满足条件的都返回 直接一行代码解决

40.小程序api调用选择收货地址 chooseAddress()

async chooseAddress() {

  // 1. 调用小程序提供的 chooseAddress() 方法,即可使用选择收货地址的功能

  //    返回值是一个数组:第1项为错误对象;第2项为成功之后的收货地址对象

  const [err, succ] = await uni.chooseAddress().catch(err => err)

  // 2. 用户成功的选择了收货地址

  if (succ && succ.errMsg === 'chooseAddress:ok') {

    // 更新 vuex 中的收货地址

    this.updateAddress(succ)

  }

  // 3. 用户没有授权

  if (err && (err.errMsg === 'chooseAddress:fail auth deny' || err.errMsg === 'chooseAddress:fail authorize no response')) {

    this.reAuth()

  }

// 调用此方法,重新发起收货地址的授权async reAuth() {

  // 3.1 提示用户对地址进行授权

  const [err2, confirmResult] = await uni.showModal({

    content: '检测到您没打开地址权限,是否去设置打开?',

    confirmText: "确认",

    cancelText: "取消",

  })

  // 3.2 如果弹框异常,则直接退出

  if (err2) return

  // 3.3 如果用户点击了 “取消” 按钮,则提示用户 “您取消了地址授权!”

  if (confirmResult.cancel) return uni.$showMsg('您取消了地址授权!')

  // 3.4 如果用户点击了 “确认” 按钮,则调用 uni.openSetting() 方法进入授权页面,让用户重新进行授权

  if (confirmResult.confirm) return uni.openSetting({

    // 3.4.1 授权结束,需要对授权的结果做进一步判断

    success: (settingResult) => {

      // 3.4.2 地址授权的值等于 true,提示用户 “授权成功”

      if (settingResult.authSetting['scope.address']) return uni.$showMsg('授权成功!请选择地址')

      // 3.4.3 地址授权的值等于 false,提示用户 “您取消了地址授权”

      if (!settingResult.authSetting['scope.address']) return uni.$showMsg('您取消了地址授权!')

    }

  })}

  1. 购物车的全选逻辑
  2. Filter与reduce函数结合

筛选出符合条件的数据 然后用reduce进行统一操作

43 获取用户的头像和基本信息

async getUserProfile() {

const res = await uni.getUserProfile({desc: "登录"})

console.log(res[1])

 if (res[1]=== undefined) return uni.$showMsg('您取消了登录授权!')

}

  • 7
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
uni-app是一种基于Vue.js的跨平台开发框架,可以用于开发微信小程序、H5、App等多个平台的应用。《优购商城项目》是一个基于uni-app开发的微信小程序商城项目。 要实现《优购商城项目》,首先需要配置uni-app的开发环境。可以使用HBuilderX作为开发工具,它提供了丰富的功能和插件来辅助开发。然后需要获取微信小程序的APPID,这是小程序的身份证明,是唯一的。可以在微信开放平台上注册一个小程序并获取到APPID。 接下来,可以在HBuilderX中创建一个新的uni-app项目。在菜单栏中选择文件 -> 项目 -> 新建选择uni-app,填写项目名称并指定项目创建的目录。然后选择微信小程序作为目标平台,并填写小程序的APPID。这样就可以开始在uni-app上开发《优购商城项目》了。 在开发过程中,可以使用uni-app提供的丰富组件和API来实现商城功能,比如商品展示、购物车、订单管理等。可以使用uni-app提供的跨平台能力,一次开发即可在多个平台上运行。在开发完成后,可以将项目打包成微信小程序并在微信开发者工具中进行调试和发布。 通过以上步骤,就可以利用uni-app开发微信小程序实现《优购商城项目》了。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [微信小程序--优购商城项目(1)](https://blog.csdn.net/ljn1046016768/article/details/124043924)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [uniapp微信小程序实现《优购商城项目》](https://blog.csdn.net/qq_64102392/article/details/131212823)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

_揽

苦der程序员敲代码

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值