当前位置: 首页 > news >正文

web学习笔记(六十六)项目总结

目录

1. Suspense标签

2.发布订阅者模式

3.pinia的使用

4.在请求过来的数据添数据

5.设置token和取token

6. 实现触底加载

7.导航守卫判断登录状态。


1. Suspense标签

Suspense主要用于用于处理异步组件加载和数据获取。,使用这个标签可以允许你在组件等待数据或资源加载时显示一个占位符(通常是加载指示器),并在数据准备好后显示实际内容。这对用户体验来说非常重要,因为可以避免在数据加载过程中用户看到空白页面或不完整的内容。一般当我们请求数据都会用到async和await,此时就可以在app.vue页面中用 <Suspense> </Suspense>包裹住页面占位符  <RouterView></RouterView>进行使用。

  <Suspense><RouterView></RouterView></Suspense>

2.发布订阅者模式

发布订阅者模式中得先触发发布的语句,订阅方才会获得数据,所以在组件路由中获取数据并发布,在app.vue及其他路由组件中进行订阅是无法实现实时更新的,比如购物车的数量。此时我们可以使用pinia来完成这个操作,这两者有本质的区别,前者是用来传值的,后者是用来实现全局状态共享。

3.pinia的使用

(1)下载对应的库文件,如果在构建脚手架时已经选择了使用pinia进行状态管理那就不用再单独下载pinia了。

npm i pinia

(2)在main.js文件中配置pinia

import { createPinia } from 'pinia'
app.use(createPinia())

(3)在stores文件夹下创建.js文件,然后在文件中编写相关共享状态的数据,通常我们将一类状态编写在同一个.js文件中,在这个文件中需要导出defineStore,并暴露useCounter模块。 state属性是配置公告状态(数据)actions:定义修改公共状态的方法

import { defineStore } from "pinia";export const useCounter = defineStore("counter", {// state属性:配置公共状态(数据)state: () => {return { count: 0};},// actions:定义修改公共状态的方法actions: {
increment() {this.count++;
}
}
},);

(4)在需要用到useCounter的组件中进行导入和初始化的操作。

// 导入pinia
import { useCounter } from '@/stores/counter.js'
// 初始化对象
const counter = useCounter()

(5)通过counter 来调用相关变量和方法 

counter.increment()
counter.count=number.value

4.在请求过来的数据添数据

当请求过来的数据比我们需要的数据少时,我们可以自己将所需数据添加进去,比如分类中的全部,通常是接口数据中不包含的,此时就需要我们自己将分类添加到数据中去。

(1)在初始化时就将全部的数据以对象的方式放入数组中

// 初始商品分类的数据
const Categoricallists = ref([{ id: 0, cate_name: '全部' }])

(2)使用.push的方式将接口返回的数据添加到 数组Categoricallists中。注意:我们从接口中拿到的是一个数组,在push时需要将数据解构出来。

const sidebarreq = async () => {const sidebarres = await http(`/api/category`)sidebararr.value =  sidebarres.dataCategoricallists.value.push(...data[0].children)}
sidebarreq()

5.设置token和取token

设置token(将token存到本地存储中):  localStorage.setItem('data', data.data.token)

取token(从本地存储中取token):const token = localStorage.getItem('data')

6. 实现触底加载

(1)给盒子添加滚动事件

 <div class="box" @scroll="pageScroll"></div>

(2)写触底加载事件的逻辑

// 触底事件
const pageScroll = async (e) => {const sTop = e.target.scrollTop // 容器已滚动高度const sHeight = e.target.scrollHeight // 容器内容总高度const cHeight = e.target.clientHeight // 容器元素高度if (sHeight - sTop <= cHeight) {console.log('触底了')}
}

(3)注意需要给box设置固定的高度,不能把高度设为auto。

7.导航守卫判断登录状态。

 在index.js中写入相关代码,注意,此时如果没有登录,在跳转登录页面时我们已经通过to.path将我们需要跳转到的页面以参数的形式传递到了登录页面,我们可以在登录页面进行获取,如何进行路由的重定向

router.beforeEach((to, from,next) => {// to:目的地页面路由 from:当前要切换的路由// 返回false以取消导航// 一般需要授权验证的页面才需要拦截,其他页面直接放行。if (to.path == '/Shoppingcart'||to.path == '/Personal') {if (localStorage.getItem('data')) next();//已登录,允许跳转else {console.log('请先登录');next(`/login?target=${to.path}`)//跳转登录页面}}// return falseelse {next();//使用了next参数就不再使用返回值true/false来决定是否跳转。因为next()不带参数等价于return true,允许跳转}// 保证任意条件下next只执行一次  })

路由的重定向:

//   重定向路由router.replace(route.query.target)



 

http://www.lryc.cn/news/382244.html

相关文章:

  • 红队内网攻防渗透:内网渗透之内网对抗:横向移动篇域控系统提权NetLogonADCSPACKDC永恒之蓝CVE漏洞
  • VMware Workstation安装Windows Server2019系统详细操作步骤
  • HTML5【新特性总结】
  • 【面试题】面试官:判断图是否有环?_数据结构复试问题 有向图是否有环
  • 办理北京公司注册地址异常变更要求和流程
  • 当你在浏览器输入一个地址
  • JSP基础知识概述
  • 国产编程—— 仓颉
  • 0X JavaSE-并发编程(锁)
  • 云计算【第一阶段(18)】磁盘管理与文件系统 分区格式挂载(一)
  • Flask-cache
  • 【面试题】面试小技巧:如果有人问你 xxx 技术是什么?_面试问你对什么技术特别了解
  • 简单分享Python语言(发现其实并不难)
  • 基于VTK9.3.0+Visual Studio2017 c++实现DICOM影像MPR多平面重建
  • 【论文精读】ViM: Out-Of-Distribution with Virtual-logit Matching 使用虚拟分对数匹配的分布外检测
  • 【面试题】前端 移动端自适应?_前端移动端适配面试题
  • 在Maven工程中手动配置并测试SpringBoot(巨详)
  • c# 去掉字符串首尾的 特殊符号
  • 在容器中共享本地文件
  • Java Matcher类方法深度剖析:查找和匹配、索引方法
  • Redis-数据类型-zset
  • 手撕RPC——前言
  • Vite: 关于预构建的毫秒级响应
  • Docker 中 MySQL 迁移策略(单节点)
  • 猫头虎 分享已解决Error || API Rate Limits: HTTP 429 Too Many Requests
  • 开发一个python工具,pdf转图片,并且截成单个图片,然后修整没用的白边及循环遍历文件夹全量压缩图片
  • 【数据结构与算法 经典例题】使用栈实现队列(图文详解)
  • 不知大家信不信,竟有这么巧的事,我领导的老婆,竟然是我老婆的下属,我在想要不要利用下这层关系,改善下领导对我的态度,领导怕老婆
  • 使用pkg -r 命令选项向jail虚拟子系统里安装软件@FreeBSD
  • Go语言开发框架GoFly已集成数据可视化大屏开发功能,让开发者只专注业务开发,本文指导大家如何使用