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.data
  Categoricallists.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 false
 
    else {
 
        next();//使用了next参数就不再使用返回值true/false来决定是否跳转。因为next()不带参数等价于return true,允许跳转
 
    }
 
    // 保证任意条件下next只执行一次  
 
})

路由的重定向:

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



 

  • 12
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java SSM(Spring+SpringMVC+MyBatis)是一种基于Java语言的Web开发框架。学习这个框架的过程中,我深刻体会到它的强大和灵活性。 首先,Spring框架为开发者提供了一个强大的IOC(Inversion of Control)容器,它能够管理和注入对象,减少了代码之间的耦合性。通过配置文件或注解,我们可以轻松地定义和获取各种对象,提高了代码的可维护性和可扩展性。 其次,SpringMVC框架是一种MVC(Model-View-Controller)设计模式的实现,它用于处理Web请求和响应。通过配置一个请求映射表和处理器,我们可以将请求分发给相应的控制器进行处理,并将处理结果返回给客户端。SpringMVC还提供了一些便捷的注解和标签,用于简化页面的渲染和参数的绑定。 最后,MyBatis是一种优秀的持久化框架,它能够将数据库操作与Java对象之间的映射简化为简单的配置。通过编写SQL映射文件和定义POJO(Plain Old Java Object)类,我们可以方便地进行数据库的增删改查操作,而无需编写冗长的SQL语句。 在学习Java SSM框架的过程中,我深入理解了软件开发过程中的MVC思想,并学会了如何利用Spring、SpringMVC和MyBatis来实现一个完整的Web应用程序。通过不断的实践和调试,我逐渐培养了自己解决问题和调试代码的能力。 总结起来,学习Java SSM框架使我深入理解了软件开发的各个环节,并提升了我的编码能力和开发效率。我相信这些知识和经验将对我的职业发展和项目实施起到积极的促进作用。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值