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

文章目录

    • 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.总结

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

MGRE综合实验

一&#xff1a;实验要求 二&#xff1a;实验过程 1、配置IP [r1]int g0/0/0 [r1-GigabitEthernet0/0/0]ip add 192.168.1.1 24 [r1-GigabitEthernet0/0/0]q [r1]int s4/0/0 [r1-Serial4/0/0]ip add 15.0.0.1 8 [r2]int g0/0/0 [r2-GigabitEthernet0/0/0]ip add 192.168.2.1 2…

【高效开发工具系列】Java读取Html

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

STM32 SDIO接口传输中的错误处理和中断优化技巧

在 STM32 的 SDIO 接口传输中&#xff0c;错误处理和中断优化是确保传输稳定和可靠性的重要方面。下面将介绍一些常用的错误处理和中断优化技巧&#xff0c;并给出相应的代码示例。 ✅作者简介&#xff1a;热爱科研的嵌入式开发者&#xff0c;修心和技术同步精进 ❤欢迎关注我的…

Redis 持久化详解:RDB 与 AOF 的配置、触发机制和实际测试

什么是持久化&#xff1f; 就是 Redis 将内存数据持久化到硬盘&#xff0c;避免从数据库恢复数据。之所以避免从数据库恢复数据是因为后端数据通常有性能瓶颈&#xff0c;大量数据从数据库恢复可能会给数据库造成巨大压力。 Redis 持久化通常有 RDB 和 AOF 两种方式&#xff…

VMware虚拟机部署Linux Ubuntu系统

本文介绍基于VMware Workstation Pro虚拟机软件&#xff0c;配置Linux Ubuntu操作系统环境的方法。 首先&#xff0c;我们需要进行VMware Workstation Pro虚拟机软件的下载与安装。需要注意的是&#xff0c;VMware Workstation Pro软件是一个收费软件&#xff0c;而互联网中有很…

一道CTFsql注入的问题

打开页面一个登录框&#xff0c;我甚至都没先弱口令登录&#xff0c;直接开始sql测试&#xff0c;结果测到最后发现没有&#xff0c;直接admin/admin就就去了&#xff0c;下次遇到登录框请先测试弱口令&#xff0c;ok&#xff1f; 登录成功后&#xff1a; 这句话提示中提到了…

linux(进程概念)

目录 前言&#xff1a; 正文 冯诺依曼体系结构 操作系统 &#xff08;Operator System&#xff09; 概念 目的 定位 如何理解“管理” 进程组织 基本概念 内核数据结构 代码和数据 查看进程 ps指令 top指令 父子进程 fork创建进程 小结&#xff1a; 前…

【Web】云服务器的购买与使用

目录 一、云服务器的选择 二、配置 一、云服务器的选择 腾讯云、阿里云都可以 有首次试用、学生打折啥的。 租借时间、配置都可以自行选择 二、配置 先进行重置密码、拍摄快照

HCS 华为云Stack产品组件

HCS 华为云Stack产品组件 Cloud Provisioning Service(CPS) 负责laas的云平台层的部署和升级是laas层中真正面向硬件设备&#xff0c;并将其池化软件化的部件。 Service OM 资源池(计算/存储/网络)以及基础云服务(ECS/EVS/PC)的管理工具。 ManageOne ManageOne包括服务中心…

【服务器Midjourney】创建部署Midjourney网站

目录 🌺【前言】 🌺【准备】 🌺【宝塔搭建MJ】 🌼1. 给服务器添加端口 🌼2. 使用Xshell连接服务器 🌼3. 安装docker 🌼4. 安装Midjourney程序 🌼5. 绑定域名+申请SSL证书 🌼6. 更新网站

python tkinter 界面开发基本结构

python tkinter 界面开发基本结构 # -*- coding:utf-8 -*- import tkinter as tkroot_window tk.Tk() # 设置窗口title root_window.title(tkinter 界面开发) # 设置窗口大小:宽x高,注,此处不能为 "*",必须使用 "x" root_window.geometry(600x500) # 更改…

C++: 内联函数

目录 概念&#xff1a; 与宏的对比&#xff1a; 函数膨胀&#xff1a; 内联函数的特性&#xff1a; 概念&#xff1a; 以inline修饰的函数叫做内联函数&#xff0c;编译时C编译器会在调用内联函数的地方展开&#xff0c;没有函数调 用建立栈帧的开销&#xff0c;内联函数…

Git分布式版本控制工具

1、目标 了解Git基本概念 能够概述git工作流程 能够使用Git常用命令 熟悉Git代码托管服务 能够使用idea操作git 2、概述 2.1、开发中的实际场景 场景一&#xff1a;备份 小明负责的模块就要完成了&#xff0c;就在即将Release之前的一瞬间&#xff0c;电脑突然蓝屏&…

算法基础课-数据结构

单链表 题目链接&#xff1a;826. 单链表 - AcWing题库 思路&#xff1a;AcWing 826. 单链表---图解 - AcWing 需要注意的点在于理解ne[idx] head&#xff0c;idx表示当前的点&#xff0c;意思是将当前的点链到头结点的后面&#xff0c;再将头结点链在当前idx的前面。 #inc…

2024-01-24-redis4

秒杀活动 需求&#xff1a;库存中有10件商品 商品的信息自定义 同时有100个人去抢购&#xff08;这里100个人的抢购由jmeter来模拟&#xff09; jmeter的使用 在idea中将后台代码实现 package org.aaa.controller;import org.apache.commons.lang3.StringUtils; import org.sp…

goland课程管理(6)

项目目录结构如下图所示&#xff1a; core包下面&#xff1a; class.go package coreimport "github.com/gin-gonic/gin"func Class1(ctx *gin.Context) {}course.go package coreimport (. "cookie/database". "cookie/model""fmt"…

服务端开发小记02——Maven

这里写目录标题 Maven简介Maven在Linux下的安装Maven常用命令 Maven简介 Apache Maven Project是一个apache的开源项目&#xff0c;是用于构建和管理Java项目的工具包。 用Maven可以方便地创建项目&#xff0c;基于archetype可以创建多种类型的java项目&#xff1b;Maven仓库…

华为三层交换机与防火墙对接配置上网示例

三层交换机与防火墙对接上网配置示例 组网图形 图1 三层交换机与防火墙对接上网组网图 三层交换机简介配置注意事项组网需求配置思路操作步骤配置文件 三层交换机简介 三层交换机是具有路由功能的交换机&#xff0c;由于路由属于OSI模型中第三层网络层的功能&#xff0c;所以…

VMware 虚拟机环境下的ubuntu 上安装mysql,并能远程访问数据库

需求&#xff1a;为了实现在linux上模拟服务器跑代码&#xff0c;并存储在mysql上&#xff0c;通过远程可视化mysql数据库软件查看linux上mysql数据库数据的实时动态。 1. 虚拟机和ubuntu的安装 这里我选择的是VMware workstation-v14, ubuntu-18.04.1。至于体流程网上很多&a…

基于Java的高校运动会管理系统的设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言 详细视频演示 具体实现截图 技术栈 后端框架SpringBoot 前端框架Vue 持久层框架MyBaitsPlus 系统测试 系统测试目的 系统功能测试 系统测试结论 代码参考 数据库参考 源码获取 前言 &#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN特邀作者、…