面经基础版案例(路由,请求渲染,传参,组件缓存)

news2024/11/18 17:25:08

文章目录

    • 1.案例效果分析
    • 2.配置一级路由(首页,详情)
    • 3.配置二级路由
    • 4.导航高亮效果
    • 5.首页的请求渲染
    • 6.传参(查询参数 $ 动态路由)
    • 7.详情页渲染
    • 8.组件缓存kepp-alive
    • 9.总结

1.案例效果分析

在这里插入图片描述

2.配置一级路由(首页,详情)

把首页配成一个路由 → 注意项关于'/'在这里插入图片描述

import Vue from 'vue'
import VueRouter from "vue-router";


import Layout from '@/views/Layout'
import ArticleDetail from '@/views/ArticleDetail'
Vue.use(VueRouter)

const router = new VueRouter({
  routes: [
    {
      path:'/',//首页可以配成一个/
      component: Layout //渲染一个组件
    },
    {
      path:'/detail',
      component:ArticleDetail
    }
  ]
})

export default router

在这里插入图片描述
在这里插入图片描述

3.配置二级路由

如果要配嵌套路由可以直接写一个配置项children

import Vue from 'vue'
import VueRouter from "vue-router";


import Layout from '@/views/Layout'
import Article from '@/views/Article'
import Collect from '@/views/Collect'
import Like from '@/views/Like'
import User from '@/views/User'
import ArticleDetail from '@/views/ArticleDetail'
Vue.use(VueRouter)

const router = new VueRouter({
  //  如果访问到 /artucle这个路径时,就匹配展示Article组件
  routes: [
    {
      path:'/',//首页可以配成一个/
      component: Layout, //渲染一个组件
      //通过 children 配置项,可以配置嵌套子路由
      //配置嵌套子路由分成两步
      //1.在children配置项中配置规则
      //2.准备二级路由出口
      children:[
        {
          path:'/article',
          component:Article
        },
        {
          path:'/collect',
          component:Collect
        },
        {
          path:'/like',
          component:Like
        },
        {
          path:'/user',
          component:User
        },
      ]
    },
    {
      path:'/detail',
      component:ArticleDetail
    }
  ]
})

export default router

下面是首页二级路由出口

<template>
  <div class="h5-wrapper">
    <div class="content">
      <!-- 不希望写死,也要换成路由组件,二级路由出口 ,就会展示匹配到的二级路由组件 -->
      <router-view></router-view>
    </div>

</template>

4.导航高亮效果

在这里插入图片描述
1.将a标签换成router-link,要加to属性
2.结合高亮类名,实现高亮效果(router-link-active模糊匹配)

layout.vue
<template>
  <div class="h5-wrapper">
    <div class="content">
      <!-- 不希望写死,也要换成路由组件,二级路由出口 ,就会展示匹配到的二级路由组件 -->
      <router-view></router-view>
    </div>
    <nav class="tabbar">
      <router-link to="/article">面经</router-link>
      <router-link to="/collect">收藏</router-link>
      <router-link to="/like">喜欢</router-link>
      <router-link to="/user">我的</router-link>
    </nav>
  </div>
</template>

<style>
    a.router-link-active{
      color: palevioletred;
    }
</style>

5.首页的请求渲染

首页的请求渲染其实指的是嵌套二级路由中的面经里面的文章列表,就是组件Article.vue
在这里插入图片描述

Article.vue
<template>
  <div class="article-page">
    <div
      v-for="item in articles"
      :key="item.id"
      class="article-item"
      >
      <div class="head">
        <img :src="item.creatorAvatar" alt="" />
        <div class="con">
          <p class="title">{{ item.stem }}</p>
          <p class="other">{{ item.creatorName }} | {{ item.createdAt }}</p>
        </div>
      </div>
      <div class="body">
         {{ item.content }}
      </div>
      <div class="foot">点赞 {{ item.likeCount }} | 浏览 {{ item.views }}</div>
    </div>
  </div>
</template>

<script>
import axios from 'axios';

//首页请求渲染
//1.用axios请求,安装axios
//2.看对应的接口文档,确认请求方式和地址和参数
// 请求地址: https://mock.boxuegu.com/mock/3083/articles
// 请求方式: get
//3.具体的确认完了,在created中发请求,获取数据,然后存起来
//4.页面动态渲染
export default {
  name: 'ArticlePage',
  async created () {
    const res = await axios.get('https://mock.boxuegu.com/mock/3083/articles')
    this.articles = res.data.result.rows
  },
  data () {
    return {
      articles:[

      ]//把拿到的数据存到里面
    }
  }
}
</script>

在这里插入图片描述

6.传参(查询参数 $ 动态路由)

在这里插入图片描述

  1. 先给文章注册点击事件
  2. 有两种传参方式:

第一种:查询参数传参 ?参数=参数 通过 this.$route.query.参数名 获取(更适合多个参数的情况)

@click="$router.push(`/detail?id=$(item.id)`)"
在这里插入图片描述
可以在ArticlDetail.vue中获取一下👇
在这里插入图片描述

第二种:动态路由传参 改造路由 => /路径/参数 通过 this.$route.params.参数(单个参数更优雅方便)

  1. 改路由 把path:‘/detail’改成path:’/detail/:id’
    在这里插入图片描述
  2. 把标蓝的值改成${item.id}(通过这个来跳转)
    在这里插入图片描述
    在这里插入图片描述
  3. 在ArticleDetail接收(不是通过query,而是通过$route.params
    在这里插入图片描述
  4. 解决bug
    在这里插入图片描述
    返回首页一片空白
    可以在index.js中给首页进行重定向
    在这里插入图片描述
    点击返回按钮返回首页,只要写一个back就可以了
    <nav class="nav"><span @click="$router.back()" class="back">&lt;</span> 面经详情</nav>

7.详情页渲染

先看接口文档,然后在created当中去发请求,发完请求之后将数据存储到article中,最后在页面中渲染。问题是当article内容没有获取完成,就不用做渲染

<template>
  <div class="article-detail-page" v-if="article.id"><!--应为加载需要事件,所以加载的时候,有一段时间会不显示数据,
    只显示“浏览量”这几个字等,所以可以写一个v-if,告诉它什么时候才做渲染-->
    <nav class="nav"><span @click="$router.back()" class="back">&lt;</span> 面经详情</nav>
    <header class="header">
      <h1>{{ article.stem }}</h1>
      <p>{{ article.createdAt }} | {{ article.views }} 浏览量 |  {{ article.likeCount }} 点赞数</p>
      <p>
        <img
          :src="article.creatorAvatar"
          alt=""
        />
        <span>{{ article.creatorName }}</span>
      </p>
    </header>
    <main class="body">
      {{ article.content }}
    </main>
  </div>
</template>

<script>
import axios from 'axios';

// 请求地址: https://mock.boxuegu.com/mock/3083/articles/:id
// 请求方式: get
export default {
  name: "ArticleDetailPage",
  data() {
    return {
      article:{}//存数据
    }
  },
  async created () {
    const id = this.$route.params.id
    const { data } = await axios.get(`https://mock.boxuegu.com/mock/3083/articles/${id}`)//id不能写死
    this.article = data.result
    console.log(this.article)
  },
}
</0000000000000000script>

8.组件缓存kepp-alive

问题:从面经 点到 详情页,又点返回,数据重新加载了 → 希望回到原来的位置
原因:路由跳转后,组件被销毁了,返回回来组件又被重建了,所以数据重新被加载了
解决:利用keep-alive将组件缓存下来

keep-alive是什么

  1. keep-alive 是Vue的内置组件,当它包裹动态组件时,会缓存不活动的组件实例,而不是销毁它们。
  2. keep-alive 是一个抽象组件:它自身不会渲染成一个DOM元素,也不会出现在父组件链中。

keep-alive的有点

  • 在组件切换过程中 把切换出去的组件保留在内存中,防止重复渲染DOM,减少加载时间及性能消耗,提高用户体验性。
<template>
  <div class="h5-wrapper">
    <!-- 包裹了keep-alive 一级路由匹配的组件都会被缓存 
      Layout组件  Detail组件,都会被缓存
    -->
    <keep-alive>
      <router-view></router-view>
    </keep-alive>
  </div>
</template>

问题是,直接用它包裹,会缓存所有被切换的组件,以后不论首页点什么,都是跳转回来之前的那一页
3. keep-alive的三个属性
①include:组件名数组,只有匹配的组件会被缓存

App.vue
<template>
  <div class="h5-wrapper" :include="['LayoutPage']">
    <keep-alive>
      <router-view></router-view>
    </keep-alive>
  </div>
</template>

Layout.vue
<script>
export default {
  //组件名,如果没有配置name,才会找文件名作为组件名
  name: "LayoutPage",
}
</script>
也可以这么写,如果将来要缓存的组件多的话
<template>
  <div class="h5-wrapper">
    <!-- 包裹了keep-alive 一级路由匹配的组件都会被缓存 
      Layout组件  Detail组件,都会被缓存

      需求:只希望Layout被缓存,include配置
      :include="组件名数组"
    -->
    <keep-alive :include="['keepArr']">
      <router-view></router-view>
    </keep-alive>
  </div>
</template>

<script>
export default {
  name: "h5-wrapper",
  //如果缓存的组件比较多,可以提供一个数据
  data () {
    return {
      //缓存组件名的数组
      keepArr:['LayoutPage']
    }
  }
}
</script>

②exclude:组件名数组,任何匹配的组件都不会被缓存
③max:最多可以缓存多少组件实例

被缓存的组件会多两个生命周期
actived和deactived

actived:激活时,组件被看到时触发
deactive:失活时,离开页面,组件看不见时触发
作用:组件一旦被缓存,就不涉及到组件的创建和销毁了,那这个时候组件的什么beforecreat,created,beforemount,mounted等对应的钩子就不会被触发了
在这里插入图片描述
在这里插入图片描述

9.总结

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1417664.html

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

相关文章

实战 | OpenCV+OCR实现弧形文字识别实例(详细步骤 + 源码)

导 读 本文主要介绍基于OpenCV+OCR实现弧形文字识别实例,并给详细步骤和代码。源码在文末。 背景介绍 测试图如下,目标是正确识别图中的字符。图片来源: https://www.51halcon.com/forum.php?mod=viewthread&tid=6712 同样,论坛中已经给出了Halcon实现代码,…

web应用课——(第二讲:CSS)

目录 一、实战项目一&#xff1a;Acwing名片 二、实战项目二&#xff1a;Bilibili名片 三、样式定义方式 四、选择器 五、颜色 六、文本 七、字体 八、背景 九、边框 十、元素展示格式 十一、内边距与外边距 十二、盒子模型 十三、位置 十四、浮动 十五、flex布…

老代码为啥如此设计,我是如何解决编译失败的?

周末翻出三年前的杰作“jpy”&#xff0c;专为人工智能开发的dsl语言&#xff0c;不仅编译无法通过&#xff0c;而且一连串的疑问映入眼帘。这…这…这些文件/内容都是干啥的啊&#xff0c;为什么如此设计&#xff1f; 技术千万条&#xff0c;专研第一条&#xff0c;自嗨无笔记…

Lombok的详细教程

什么是lombok Lombok是一个Java库&#xff0c;它通过提供一组注释来简化Java类的开发。使用Lombok&#xff0c;开发人员可以通过在类或字段上添加注释来自动生成通用的方法&#xff0c;如getter、setter、equals、hashCode等。这样可以减少冗余的样板代码&#xff0c;提高开发效…

2024 年最佳 PDF 编辑器榜单:PDF 编辑的首选

您可能经常遇到或使用 PDF 文件 - 它们在现代跨平台世界中无处不在。大多数时候&#xff0c;在查看 PDF 时&#xff0c;您可以使用免费软件来阅读或评论这些文件。但如果您还需要编辑它们怎么办&#xff1f;这就是 PDF 编辑器的用武之地。 最好的 PDF 编辑器允许您编辑、创建、…

Bytebase 签约 Aptive,助力北美商住害虫控制服务领导者构建统一数据库操作平台

在数字化快速发展时代&#xff0c;有效的规范数据库管理对企业安全运营至关重要。近日&#xff0c;数据库 DevOps 团队协同管理工具 Bytebase 签约北美商住害虫控制服务的领导者 Aptive Environmental&#xff0c;旨在全面优化 Aptive Environmental 的数据库操作管理&#xff…

数据结构与算法教程,数据结构C语言版教程!(第六部分、数据结构树,树存储结构详解)四

第六部分、数据结构树&#xff0c;树存储结构详解 数据结构的树存储结构&#xff0c;常用于存储逻辑关系为 "一对多" 的数据。 树存储结构中&#xff0c;最常用的还是二叉树&#xff0c;本章就二叉树的存储结构、二叉树的前序、中序、后序以及层次遍历、线索二叉树、…

第一节课,用户管理--后端初始化,项目调通。二次翻工

一、代码下载 网址&#xff1a; 用户管理第一节课&#xff0c;阿里生成代码包-CSDN博客 二、项目步骤&#xff0c;参考从 网址&#xff1a; 一、第一节课&#xff0c;用户管理--后端初始化&#xff0c;项目调通-CSDN博客 从这里开始跟随 &#xff08;一&#xff09;、跟随…

eclipse用gerrit提交失败

1.gerrit简介 Gerrit&#xff0c;一种免费、开放源代码的代码审查软件&#xff0c;使用网页界面。利用网页浏览器&#xff0c;同一个团队的软件程序员&#xff0c;可以相互审阅彼此修改后的程序代码&#xff0c;决定是否能够提交&#xff0c;退回或者继续修改。它使用Git作为底…

精通Python第13篇—数据之光:Pyecharts旭日图的魔法舞台

文章目录 引言准备工作绘制基本旭日图调整颜色和样式添加交互功能定制标签和标签格式嵌套层级数据高级样式与自定义进阶主题&#xff1a;动态旭日图数据源扩展&#xff1a;外部JSON文件总结 引言 数据可视化在现代编程中扮演着重要的角色&#xff0c;而Pyecharts是Python中一个…

【数据分析】Excel中使用VBA进行宏编程

目录 0 准备工作1 VBA简介1.1 Excel VBA应用程序的构成1.2 事件驱动1.3 宏1.3.1 创建宏1.3.2 宏安全 2 VBA基础2.1 注释2.2 数据类型2.2.1 基本数据类型2.2.2 枚举类型2.2.3 用户自定义数据类型 2.2 变量2.3 常量2.4 运算符2.5 程序结构2.6 过程2.7 函数 3 Excel应用程序开发流…

配置华为交换机环路检测案例

知识改变命运&#xff0c;技术就是要分享&#xff0c;有问题随时联系&#xff0c;免费答疑&#xff0c;欢迎联系&#xff01; 厦门微思网络​​​​​​https://www.xmws.cn 华为认证\华为HCIA-Datacom\华为HCIP-Datacom\华为HCIE-Datacom 思科认证\CCNA\CCNP\CCIE Linux\RHCE…

给你一颗“定心丸”——记一次由线上事故引发的Log4j2日志异步打印优化分析

一、内容提要 自知是人外有人&#xff0c;天外有天&#xff0c;相信对于Log4j2的异步日志打印早有老师或者同学已是熟稔于心&#xff0c;优化配置更是信手拈来&#xff0c;为了防止我在这里啰里八嗦的班门弄斧&#xff0c;我先将谜底在此公布&#xff1a;_log4j2.asyncQueueFu…

【ArcGIS微课1000例】0098:查询河流流经过的格网

本实验讲述,ArcGIS中查询河流流经过的格网,如黄河流经过的格网、县城、乡镇、省份等。 文章目录 一、加载数据二、空间查询三、结果导出四、注意事项一、加载数据 加载实验配套数据0098.rar中的河流(黄河)和格网数据,如下图所示: 接下来,将查询河流流经过的格网有哪些并…

Python进阶(1) | 使用VScode写单元测试

Python进阶(1) | 单元测试 2024.01.28 VSCode: 1.85.1 Linux(ubuntu 22.04) 文章目录 Python进阶(1) | 单元测试1. 目的2. Python Profile3. 单元测试框架3.1 什么是单元测试3.2 选一个单元测试框架3.3 编写 Python 单元测试代码3.4 在 VSCode 里发现单元测试3.5 再写一个单元…

Linux的优先级说明

一、背景 在工作中&#xff0c;不少同学对nice&#xff0c;priority&#xff0c;schedue策略&#xff0c;实时优先级&#xff0c;普通进程优先级的概念混淆&#xff0c;导致最后的代码可能引入bug&#xff0c;本文将统一进行说明&#xff0c;部分内容参考网络大佬的文章 &…

美化背景(拼图小游戏)

package Puzzlegame.com.wxj.ui;import javax.swing.*; import javax.swing.border.BevelBorder; import java.util.Random;public class GameJframe extends JFrame { //游戏主界面 //创建一个二维数组//目的&#xff1a;管理数据//加载图片的时候&#xff0c;会根据二维数组中…

STM32读取MPU6050数据并通过角度值控制舵机运动(STM32、GY-521 MPU6050、SG90舵机、MG946舵机)

通过STM32F103C8T6读取MPU6050数据控制舵机运动&#xff08;STM32、GY-521 MPU6050、SG90舵机、MG946舵机&#xff09; 最终现象一、MPU6050数据读取二、舵机控制原理①什么是PWM&#xff1f;②STM32F103C8T6如何生成PWM&#xff1f;③控制舵机需要什么样的PWM波&#xff1f; 三…

看图说话:Git图谱解读

很多新加入公司的同学在使用Git各类客户端管理代码的过程中对于Git图谱解读不太理解&#xff0c;我们常用的Git客户端是SourceTree&#xff0c;配合P4Merge进行冲突解决基本可以满足日常工作大部分需要。不同的Git客户端工具对图谱展示会有些许差异&#xff0c;以下是SourceTre…

jenkins对接K8S

创建连接K8S的凭据 查看需要使用到的命名空间 [rootk8s ~]# kubectl get ns |grep arts-system arts-system Active 16d创建service accounts [rootk8s ~]# kubectl create sa jenkins-k8s -n arts-system serviceaccount/jenkins-k8s created [rootk8s ~]# kubectl…