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

文章目录

    • 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"><divv-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.idconst { data } = await axios.get(`https://mock.boxuegu.com/mock/3083/articles/${id}`)//id不能写死this.article = data.resultconsole.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.mzph.cn/news/653908.shtml

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

相关文章

2001-2019年全球500米分辨率植被聚集指数CAS-CI数据分享

各位同学们好&#xff0c;今天分享的是2001-2019年全球500米分辨率植被聚集指数CAS-CI数据。如果您需要下载或处理遥感数据等方面的帮助&#xff0c;您可以私信或评论。 一、数据简介 植被聚集指数&#xff08;clumping index, CI&#xff09;是一个重要的冠层结构参数&#…

SpringBoot整合Xxl-Job实现异步任务调度中心

目录 一、下载 1、源码 2、项目结构 3、模块说明 二、部署任务调度中心 1、创建数据库xxl-job 2、配置数据库 3、启动admin模块 4、打开任务调度中心 三、SpringBoot整合xxl-job 1、导入依赖 2、配置yml文件 3、配置类 4、启动项目 5、任务配置 6、测试 一、下…

UE5在VisualStudio升级后产生C++无法编译的问题

往期的虚幻引擎项目在VS更新后&#xff0c;编译时会报错&#xff0c;这一般出现在VS升级之后&#xff0c;UE对于VC的编译器定位没有更新导致&#xff1b; 有出现如下问题&#xff1a; 问题1&#xff1a; Running I:/EPCI/Epic Games/UE_5.3/Engine/Build/BatchFiles/Build.ba…

vue3+threejs+koa可视化项目——实现登录注册(第三步)

文章目录 ⭐前言&#x1f496;往期node系列文章&#x1f496;threejs系列相关文章&#x1f496;vue3threejs系列 ⭐koa后端登录注册逻辑&#xff08;jwt&#xff09;&#x1f496; koa登录注册 ⭐vue3前端登录注册权限控制&#x1f496; 登录页面&#x1f496; 注册页面 ⭐总结…

Promethues:普罗米修斯

promethues是一个开源的系统监控以及报警系统。整和zabbix的功能&#xff0c;系统&#xff0c;网络&#xff0c;设备promethues可以兼容网络&#xff0c;设备。容器监控。告警系统。因为他和k8s是一个项目基金开发的产品&#xff0c;天生匹配k8s的原生系统。对容器化和云原生服…

MySQL(下)

四、事务 一、概念 对数据库的一次执行中有多条sql语句执行。这多条sql在一次执行中&#xff0c;要么都成功执行&#xff0c;要么都不执行。保证了数据完整性。MySQL中只有innodb引擎支持事务。 二、特性 事务是必须满足 4 个条件&#xff08;ACID&#xff09;&#x…

江西公务员考试报名照如何上传成功

2024年江西省考报名公告已经发布了&#xff0c;想要参加江西省考报名的姐妹们&#xff0c;快来看看&#xff0c;提前了解报名流程&#xff0c;和报名照上传要求。 网上报名时间&#xff1a;1月28日9:00至2月2日17:00 网上缴费时间&#xff1a;1月28日9:00至2月3日17:00 打印准考…

备战蓝桥杯----数据结构及STL应用(基础2)

上次我们讲了vector的大致内容&#xff0c;接下来让我们讲一下栈&#xff0c;队列吧&#xff01; 什么是栈呢&#xff1f; 很简单&#xff0c;我们用的羽毛球桶就是&#xff0c;我们取的球&#xff0c;是最后放的&#xff0c;栈是一种先进后出的数据结构。 方法函数 s.push(…

SpringBoot深入解析:掌握自动装配机制及其定制化原理

推荐一款我一直在用的ChatGPT4.0国内站点&#xff0c;每日有免费使用额度&#xff0c;支持PC、APP、VScode插件同步使用 SpringBoot篇&#xff1a;SpringBoot的自动装配原理 SpringBoot是一个旨在简化Spring应用初始搭建以及开发过程的框架。它利用了Spring框架的依赖注入特性…

HDFS Federation前世今生

一 背景 熟悉大数据的人应该都知道&#xff0c;HDFS 是一个分布式文件系统&#xff0c;它是基于谷歌的GFS实现的开源系统&#xff0c;设计目的就是提供一个高度容错性和高吞吐量的海量数据存储解决方案。在经典的HDFS架构中有2个NameNode和多个DataNode&#xff0c;如下 从上面…

内网安全:RDP WinRS WinRM SPN Kerberos 横向移动

目录 WinRM协议 RDP协议 域横向移动&#xff1a;RDP协议 RDP协议利用 一. 探针服务 二. 获取NTML Hash 明文密码 三. 连接执行 域横向移动&#xff1a;WinRM WinRS WinRM协议、WinRS命令利用 一. cs 内置端口扫描5985 二. 连接执行 三. 上线CS 四. CS插件横向移动…

第五篇:express路由路径方式(字符串,字符串模式,和正则)

&#x1f3ac; 江城开朗的豌豆&#xff1a;个人主页 &#x1f525; 个人专栏 :《 VUE 》 《 javaScript 》 &#x1f4dd; 个人网站 :《 江城开朗的豌豆&#x1fadb; 》 ⛺️ 生活的理想&#xff0c;就是为了理想的生活 ! 目录 &#x1f4d8; 引言&#xff1a; &#x1f4…

(二十一)Flask之上下文管理第二篇(细细扣一遍源码)

每篇前言&#xff1a; &#x1f3c6;&#x1f3c6;作者介绍&#xff1a;【孤寒者】—CSDN全栈领域优质创作者、HDZ核心组成员、华为云享专家Python全栈领域博主、CSDN原力计划作者 &#x1f525;&#x1f525;本文已收录于Flask框架从入门到实战专栏&#xff1a;《Flask框架从入…

《幻兽帕鲁》1月29日游戏服务器推荐!腾讯云降低规格再次降价!

腾讯29日刷新规格&#xff0c;从14M降低到12M&#xff0c;硬盘和流量都有降低&#xff0c;但价格打下来了&#xff01;价格从66元/月降低到32元/月&#xff0c;277元/3个月降低到96元/3个月&#xff01; 三大厂商4核16G的云服务器价格对齐&#xff0c;不过具体参数略有不同 阿里…

C语言数据结构——链表

&#xff08;图像由AI生成&#xff09; 0.前言 在计算机科学中&#xff0c;数据结构是存储和组织数据的一种方式&#xff0c;它不仅影响数据的存储&#xff0c;也影响数据的检索和更新效率。C语言&#xff0c;作为一种经典的编程语言&#xff0c;提供了灵活的方式来处理数据…

GIS应用水平考试一级—2009 年度第二次

全国信息化工程师——GIS应用水平考试 2009 年度第二次全国统一考试一级 试卷说明: 1、本试卷共9页,6个大题,满分150 分,150 分钟完卷。 2、考试方式为闭卷考试。 3、将第一、二、三題的答案用铅笔涂写到(NCIE-GIS)答题卡上。 4、将第四、五、六题的答案填写到主观题答题卡上…

STM32学习笔记(二) —— 调试串口

我们在调试程序时&#xff0c;经常会使用串口打印相关的调试信息&#xff0c;但是单片机串口不能直接与 PC 端的 USB 接口通讯&#xff0c;需要用到一个USB转串口的芯片来充当翻译的角色。我们使用的开发板上有这个芯片&#xff0c;所以在打印调试信息的时候直接使用USB线连接开…

C#,广义斐波那契数(Generalised Fibonacci Numbers)的算法

广义斐波那契序列(generalized Fibonacci sequence)是斐波那契数的推广。由递推关系F₁F₂…Fm-10&#xff0c;Fₘ1&#xff0c;FmnFₙFn1…Fnm1&#xff0c;n≥1所产生的序列&#xff0c;称为m级广义斐波那契序列。 计算结果&#xff1a; 源代码&#xff1a; 1 文本格式 …

【MCAL】TC397+EB-tresos之GPT配置实战 - 定时器

本篇文章介绍了在TC397平台使用EB-tresos对GPT驱动模块进行配置的实战过程,不仅介绍了使用GTM来实现定时器的方案&#xff0c;还介绍了基于GPT12来实现连续定时器的实例。因为GTM是德国博世公司开发的IP&#xff0c;而英飞凌的芯片集成了这个IP&#xff0c;并在这个基础上搭建了…

蓝牙----蓝牙连接建立_连接建立

蓝牙----蓝牙连接建立_连接建立 蓝牙连接建立过程图1.主机扫描到广播包1.1判断是否是自己关心的广播包1.2广播地址添加到扫描列表 2.主机扫描结束&#xff0c;建立连接3.主从连接成功后&#xff0c;执行连接建立后事件3.1.主机将连接句柄和设备地址添加到连接列表3.2.主机进行G…