黑马优购学习笔记

news2024/12/23 17:29:05

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.coloradmin.cn/o/597144.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

PX4之commander详解

如前所述commander的作用主要处理各种事件&#xff0c;调度控制系统的运行&#xff0c;事件包括遥控输入、用户指令、状态变更等。调度的作用主要设置控制系统运行的变量和模式&#xff0c;以使控制系统按照用户期望的模式运行&#xff0c;实现不同的控制功能。控制系统主要由n…

PIC 使能485/422_Part2.1使能485_Tx_Only

1.需求 工作中需要把目前设备的单向232转为485/422模式&#xff0c;实现双向通讯&#xff0c;目前查找相关资料。突然想到一件事&#xff0c;我是否能让232现有的单向上发线同时连工控机的tx,rx&#xff0c;然后靠协议&#xff0c;来定时切换PIC一侧的tx rx?PIC可能不支持这个…

零基础学会用Airtest-Selenium对Firefox进行自动化测试

1. 前言 本文将详细介绍如何使用AirtestIDE驱动Firefox测试&#xff0c;以及脱离AirtestIDE怎么驱动Firefox&#xff08;VScode为例&#xff09;。 看完本文零基础小白也能学会Firefox浏览器自动化测试&#xff01;&#xff01;&#xff01; 2. 如何使用AirtestIDE驱动Firef…

MyBatis 所有的 jdbcType类型

MyBatis处理MySQL字段类型date与datetime 1&#xff09; DATETIME 显示格式&#xff1a;yyyy-MM-dd HH:mm:ss 时间范围:[ 1000-01-01 00:00:00到9999-12-31 23:59:59]2&#xff09; DATE 显示格式&#xff1a;yyyy-MM-dd 时间范围&#xff1a;[1000-01-01到9999-12-31]3&#…

【SpringCloud】1.一文带你入门SpringCloud微服务

文章目录 1. 搭建父工程2. 搭建注册中心3. 搭建一个服务提供者4. 搭建一个服务消费者5. 整合OpenFeign实现服务之间的调用 1. 搭建父工程 最近打算使用 springcloud 搭建微服务玩一下&#xff0c;用到的东西大致有以下这些&#xff1a; jdk 1.8idea 2019maven 3.6.3springclo…

CS5466应用电路图|CS5466设计方案原理图|TypeC转HDMI8K30HZ(4K144HZ)芯片方案原理图

CS5466支持dsc1.1/12a压缩视频传输&#xff0c;是一款Type-C转HDMI8K30HZ或者4K144HZ方案芯片&#xff0c;其设计原理图如下&#xff1a; CS5466 Type-C/DP1.4转HDMI2.1的显示协议转换芯片, 内部集成了PD3.0及DSC decoder&#xff0c;可支持DP 2Lane最高8K30或4K144, 并能按客户…

拉取maven项目 pom出现 The <project> element is the root of the descriptor.

引入将各个module 修改JDK版本为1.8&#xff0c;然后再修改 Perferences -> Build -》Compiler -> Java Compiler各个版本&#xff0c;对各个项目改为1.8

Docker容器学习笔记

一、初始Docker 实质上&#xff1a;是将开发的代码和运行环境打包成一个容器。解决开发&#xff08;开发环境&#xff09;、测试&#xff08;测试环境&#xff09;、运维&#xff08;生产环境&#xff09;之间的沟通交流。 1.1Docker的概念 docker&#xff1a;解决跨环境迁移…

B. 广告投放

B. 广告投放 Problem - B - Codeforces 思路&#xff1a;对于这个题来说&#xff0c;我们很容易可以想到是一个dp问题&#xff0c;我们可以使用f[i][j]表示我们已经处理了前i-1个问题&#xff0c;并且当前剩余的人数是j的情况下&#xff0c;能够得到的最大的收益&#xff0c;那…

共享内存(内存映射的使用、注意事项、进程间通信、systemV共享内存)

一、内存映射 概念&#xff1a;使一个磁盘文件与内存中的一个缓冲区相映射&#xff0c;进程可以像访问普通内存一样对文件进行访问&#xff0c;不必再调用read,write。 mmap()的优点&#xff1a; 实现了用户空间和内核空间的高效交互方式 二、函数定义 void *mmap(void *ad…

PMP课堂模拟题目及解析(第17期)

161. 项目发起人任命一位高级工程师到指导委员会&#xff0c;来帮助监督项目管理计划。该工程师经常不同意由项目团队制定的计划&#xff0c;并在提交批准之前对项目管理计划表达严重关切。项目经理应该怎么做&#xff1f; A. 通知项目发起人&#xff0c;该工程师延迟了规划过程…

2、Kingbase - 修改密码报错

情况 Kingbase数据库修改密码后&#xff0c;重新连接失败 提示信息 致命错误: 用户 "system" Password 认证失败 (kbjdbc: autodetected server-encoding to be GB2312, if the message is not readable, please check database logs and/or host, port, dbname, u…

软件外包开发项目管理工具

随着软件项目的规模越做越大&#xff0c;项目管理人员需要使用工具管理项目进度&#xff0c;从而更有成效的管理好软件开发进度。软件开发的进度管理工具有很多&#xff0c;今天和大家分享一些常用的系统工具&#xff0c;希望对大家有所帮助。北京木奇移动技术有限公司&#xf…

phpStudy2018 mysql启动失败问题

phpStudy2018 mysql启动失败问题 1.winR运行窗口输入services.msc&#xff0c;检查服务里面有MySQLa没有。 有&#xff0c;就打开服务 没有&#xff0c;就打开phpstudy面板&#xff0c;点击其他选项菜单——>服务管理器——>MySQL——>安装服务&#xff1b;然后刷新…

C++ 继承 文字+图片+代码 超详细解刨

什么是继承&#xff1f; 继承(inheritance)机制是面向对象程序设计使代码可以复用的最重要的手段&#xff0c;它允许程序员在保持原有类特性的基础上进行扩展&#xff0c;增加功能&#xff0c;这样产生新的类&#xff0c;称派生类。 继承呈现了面向对象程序设计的层次结构&am…

二十分钟入门计算机视觉开源神器——课堂笔记

1&#xff0c;统一的深度学习框架&#xff0c;2.0 2&#xff0c;现状 3&#xff0c;代表算法库 &#xff08;1&#xff09;目标检测MMDetection 任务支持&#xff1a;目标家呢&#xff0c;实力分割&#xff0c;全景分割 覆盖广泛 算法丰富 使用方便 &#xff08;2&#xff0…

2023年Q1美团财报解读:拨开云雾 始见月明

原文出处&#xff1a;走马财经 5月底&#xff0c;随着京东、阿里巴巴、腾讯、快手、拼多多、美团等相继发布财报&#xff0c;中国互联网主流大公司的财报发布季结束。 一方面他们体量够大&#xff0c;另一方面他们要么深耕零售&#xff0c;要么与零售、消费息息相关&#xff…

复原IP地址-回溯

1题目 有效 IP 地址 正好由四个整数&#xff08;每个整数位于 0 到 255 之间组成&#xff0c;且不能含有前导 0&#xff09;&#xff0c;整数之间用 . 分隔。 例如&#xff1a;"0.1.2.201" 和 "192.168.1.1" 是 有效 IP 地址&#xff0c;但是 "0.01…

17-Vue3中其它的 Composition API

目录 1、shallowReactive 与 shallowRef2、readonly 与 shallowReadonly3、toRaw 与 markRaw4、customRef5、provide 与 inject6、响应式数据的判断7、Composition API 的优势7.1 Options API 存在的问题7.2 Composition API 的优势 1、shallowReactive 与 shallowRef shallowR…