黑马优购学习笔记

news/2024/11/8 0:05:48/

1. uni-app 简介

uni-app 是一个使用 Vue.js 开发所有前端应用的框架。开发者编写一套代码,可发布到 iOS、Android、 H5、以及各种小程序(微信/支付宝/百度/头条/QQ/钉钉/淘宝)、快应用等多个平台。

详细的 uni-app 官方文档,请翻阅 https://uniapp.dcloud.net.cn/

 2. 目录结构

3. 配置网络请求:

由于平台的限制,小程序项目中不支持 axios,而且原生的 wx.request() API 功能较为简单,不支持拦截器等全局定制的功能。因此,建议在 uni-app 项目中使用 @escook/request-miniprogram 第三方包发起网络数据请求。

官方文档:https://www.npmjs.com/package/@escook/request-miniprogram

最终,在项目的 main.js 入口文件中,通过如下的方式进行配置:

import { $http } from '@escook/request-miniprogram'
uni.$http = $http
$http.baseUrl = 'https://api-hmugo-web.itheima.net'   配置请求根路径
$http.beforeRequest = function (options) {
uni.showLoading({
title: '数据加载中...',          请求开始之前做一些事情
})
}
$http.afterRequest = function () {
uni.hideLoading()           请求完成之后做一些事情
}

4. 优化分类页面

(1) 左右导航栏一个滚动条问题解决

例如:
<view class="big"><scroll-view scroll-y="true" class="left"></scroll-view><scroll-view scroll-y="true" class="right"></scroll-view>
</view>page {// 设置page的高为100%,也就是窗口能看到的高度height: 100%;
}
.big {// scroll-view使用最重要的就是要给父容器设置高度// 如果不设置高度,就会出现两屏一起滚动,// 他们其实是使用了屏幕视图的滚动条了,而不是我们定义的scroll-view组件的滚动条height: 100%;display: flex;.left {...}.right {...}
}

(2)切换一级分类后重置滚动条的位置

1. 在 data 中定义 滚动条距离顶部的距离 :
data() {
return {
scrollTop: 0  // 滚动条距离顶部的距离
}
}2. 动态为右侧的 <scroll-view> 组件绑定 scroll-top 属性的值:
<!-- 右侧的滚动视图区域 -->
<scroll-view :scroll-top="scrollTop"></scroll-view>3. 切换一级分类时,动态设置 scrollTop 的值:
activeChanged(i) {  // 选中项改变的事件处理函数
this.scrollTop = this.scrollTop === 0 ? 1 : 0
// 让 scrollTop 的值在 0 与 1 之间切换,因为如果直接赋值为0,他的值没有变就不会改变滚动条距离
}

5.  将搜索历史记录持久化存储到本地

  uni.setStorageSync('kw', JSON.stringify(this.historyList))调用 uni.setStorageSync(key, value) 将搜索历史记录持久化存储到本地historyList:JSON.parse(uni.getStorageSync("kw"))||[]调用uni.getStorageSync("kw")获取本地存储数据

6. 渲染详情页面html标签结构

在页面结构中,使用 rich-text 组件,将带有 HTML 标签的内容,渲染为小程序的页面结构:

<rich-text :nodes="xxx.xxx"></rich-text>

7. 解决详情页面html标签结构渲染的图片底部空白间隙的问题: 

res.message.goods_introduce = res.message.goods_introduce.replace(/<img
/g, '<img style="display:block;" ')
使用字符串的 replace() 方法,为 img 标签添加行内的 style 样式,从而解决图片底部
空白间隙的问题
或replaceAll()方法
res.message.goods_introduce = res.message.goods_introduce.replaceAll("<img",
'<img style="display:block;" ')

8. 解决 .webp 格式图片在 ios 设备上无法正常显示的问题:

使用字符串的 replace() 方法,将 webp 的后缀名替换为 jpg 的后缀名
res.message.goods_introduce = res.message.goods_introduce.replace(/<img
/g, '<img style="display:block;" ').replace(/webp/g, 'jpg')

9. 解决商品价格闪烁的问题

1. 导致问题的原因:在商品详情数据请求回来之前,data 中 goods_info 的值为 {} ,因此初次渲染页面时,会导致商品价格、商品名称等闪烁的问题。

2. 解决方案:判断 goods_info.goods_name 属性的值是否存在,从而使用 v-if 指令控制页面 的显示与隐藏:

<template>
<view v-if="goods_info.goods_name">
<!-- 省略其它代码 -->
</view>
</template>

10. 渲染商品详情页面导航区域的 UI 结构

基于 uni-ui 提供的 GoodsNav 组件来实现商品导航区域的效果

11. 动态为 tabBar 页面设置数字徽标

需求描述:从商品详情页面导航到购物车页面之后,需要为tabBar中的购物车动态设置数字徽 标。

注意:除了要在 cart.vue 页面中设置购物车的数字徽标,还需要在其它 3 个 tabBar 页面中,为购 物车设置数字徽标。

此时可以使用 Vue 提供的 mixins 特性,提高代码的可维护性。

1. 在项目根目录中新建 mixins 文件夹,并在 mixins 文件夹之下新建 tabbar-badge.js 文
件,用来把设置 tabBar 徽标的代码封装为一个 mixin 文件:
import { mapGetters } from 'vuex'
export default {   //导出一个 mixin 对象
computed: {...mapGetters('cart', ['total']),
},
onShow() {      //在页面刚展示的时候,设置数字徽标uni.setTabBarBadge({  //调用 uni.setTabBarBadge() 方法,为购物车设置右上角的徽标index: 2,text: this.total + '',  //注意:text 的值必须是字符串,不能是数字})        
},
}2. 修改 home.vue,cate.vue,cart.vue,my.vue //这4个tabBar页面的源代码,分别导
入 @/mixins/tabbar-badge.js 模块并进行使用:
import badgeMix from '@/mixins/tabbar-badge.js'   //导入自己封装的 mixin 模块
export default {   //将badgeMix混入到当前的页面中进行使用
mixins: [badgeMix],
}
注意:这四个页面都要引入,不然vuex中数据更新后退回没有引入的页面tarbar数据不会更新

注意:这里不能用全局混入,因为进入没有tabBar的页面会报错

uni-number-box

带加减按钮的数字输入框。 

滑动删除的 UI 效果

组件名:uni-swipe-action

12.  实现选择收货地址的功能

调用小程序提供的uni.chooseAddress()  实现选择收货地址的功能:

返回一个promise,利用async await返回一个对象,这个对象就是收货地址的信息

注意:1. 需要先开通相关的接口权限

        2. 并在app.json中配置"requiredPrivateInfos": [ "chooseAddress"]才能使用

 官方:全局配置 | 微信开放文档

如果是在uniapp写的,拿打开 manifest.json 文件

在mp-weixin里添加

13. 点击登录按钮获取微信用户的基本信息

uni.getUserProfile({desc: "获取信息"       使用此方法可返回用户信息(例如头像,姓名等)
})uni.login()    使用此方法可返回一个code利用这两个方法返回的结果调用获取token的接口
注意:获取token的接口坏了,这里要自己写死一个token

14. 登陆成功后跳转到登陆之前的页面

在点击结算时或者其他需要先登录才能使用的功能时,如果当时未登录那就跳转到登陆页面,跳转时把跳转的方式和当前跳转前的页面路径保存到vuex或者内存中,在点击登陆后先判断有没有存的值,如果有就跳转到存到vuex或内存中的路径没有就不跳转

 15. 微信支付的流程

1. 创建订单

请求创建订单的 API 接口:把(订单金额、收货地址、订单中包含的商品信息)发送到服务器

服务器响应的结果:订单编号

2. 订单预支付

请求订单预支付的 API 接口:把(订单编号)发送到服务器

服务器响应的结果:订单预支付的参数对象 ,里面包含了订单支付相关的必要参数

3. 发起微信支付

调用 uni.requestPayment() 这个 API,发起微信支付;把步骤 2 得到的 “订单预支付对 象” 作为参数传递给 uni.requestPayment() 方法

监听 uni.requestPayment() 这个 API 的 success , fail , complete 回调函数

注意:个人无法实现微信支付功能


http://www.ppmy.cn/news/142449.html

相关文章

15.2:分金条的最小代价

一块金条切成两半&#xff0c;是需要花费和长度数值一样的铜板 比如长度为20的金条&#xff0c;不管怎么切都要花费20个铜板&#xff0c;一群人想整分整块金条&#xff0c;怎么分最省铜板? 例如&#xff0c;给定数组{10,20,30}&#xff0c;代表一共三个人&#xff0c;整块金条…

百度商业AI技术创新大赛火热进行中,携手专家大咖一起创新为更好!

百度商业AI技术创新大赛火热进行中 来自百度、中国人工智能学会 及NVIDIA的专家大咖纷纷送上寄语 希望与充满创新思维的年轻人一起 探讨AI技术的创新应用 挖掘AIGC在商业领域发展的更多可能 开启中国人工智能发展新篇章&#xff01; -戴琼海- 国务院参事 CAAI理事长 …

2020年前三个季度中最受欢迎的安全摄像机品牌

最好的相机对于安全性 2020年前三个季度中最受欢迎的安全摄像机品牌。等级基于IP视频监控系统设计之利器&#xff08;IP Video System Design Tool&#xff09;收集的汇总统计数据。 您可以在此处找到详细信息&#xff1a;https://www.jvsg.com/ipica-ratings/ 我们的主要国际…

家用监控百科:什么是WiFi摄像机,WiFi摄像机都有哪些种类

什么是WiFi摄像机&#xff0c;WiFi摄像机都有哪些种类呢&#xff1f;今天速名网为大家带来家用监控摄像机的百科知识&#xff0c;关于WiFi摄像机很多人都不陌生&#xff0c;其实看名字就能知道大概的意思&#xff0c;就是连接WiFi之后&#xff0c;在手机或者电脑&#xff0c;平…

2021年三个季度的监控摄像头品牌排名

监控摄像头品牌排名 2021年前三季度&#xff0c;海康威视和安讯士仍然是全球最受欢迎的CCTV摄像机品牌。排名第三的是大华&#xff0c;仅次于韩华科技文。这并不是今年大华和韩华科技的第一次排名互换。另一个变化是德国公司Mobotix出现在前10名最受欢迎的相机中。 在北美&…

06年2月最受用户关注前十款摄像机排行

据ZDC调查结果显示&#xff0c;2006年2月最受用户关注的前十款产品为索尼、松下与佳能这三家厂商所占据。其中&#xff0c;索尼以六款的数量胜出。余下四款产品中&#xff0c;有三款产品分属于松下旗下产品&#xff0c;佳能仅占据一款机型。以下是具体入围的前十款产品在排行榜…

摄像头介绍,比较

一、摄像头简介 摄像头&#xff08;CAMERA&#xff09;又称为电脑相机、电脑眼等&#xff0c;它作为一种视频输入设备&#xff0c;在过去被广泛的运用于视频会议、远程医疗及实时监控等方面。近年以来&#xff0c;随着互联网技术的发展&#xff0c;网络速度的不断提高&#x…

中国夜视监控摄像机市场趋势报告、技术动态创新及市场预测

夜视监控摄像机市场的企业竞争态势 该报告涉及的主要国际市场参与者有BAE Systems、FLIR Systems、Axis Communications、Robert Bosch、Samsung Electronics、Hikvision Digital Technology、L-3 Communications、Pelco、Raytheon、Honeywell、Defender、Obzerv Technologies、…