前端vuevue-router前端开发那些事儿

vue-router

2021-05-16  本文已影响0人  大佬教我写程序

路由相关知识

a用户发送一条信息,经过路由,路由会根据映射表,通过电脑的Mac地址找到对应的ip,然后将信息转发出去

什么是前端渲染,,,什么是后端渲染,,,,什么是前后端分离

02-前端后端分离阶段.png 03-SPA页面页面的阶段.png

在不刷新页面的条件下,改变URL的两种方法

image.png

HTML5的History六中改变URL而不刷新页面

路由工作的大致过程

image.png

在模块化工程中使用它(因为是一个插件, 所以可以通过Vue.use()来安装路由功能)

第一步:导入路由对象,并且调用 Vue.use(VueRouter)
第二步:创建路由实例,并且传入路由映射配置
第三步:在Vue实例中挂载创建的路由实例

在子组件中获取到路由配置信息地址的内容

$route.params.指的是正处在活跃状态的路径信息

<b>{{$route.params.userId}}</b>

vue-router使用步骤

import router from './router/router.js'
new Vue({
  router,
  render: (h) => h(App),
}).$mount('#app')

浏览器url得知路径模式 ----哈希模式转化为history模式

image.png

router-link补充

image.png
  // 将路由导入到vue实例当中
export default new Router({
  //配置组件和路由之间的关系
  routes: routers,
  mode: 'history',
  //修改点击之后增加的类名
  linkActiveClass: 'active'
})

懒加载

  1. ES6方法 const Home = () => import('../components/Home.vue')
  2. AMD写法:const About = resolve => require(['../components/About.vue'], resolve);
  3. 结合Vue的异步组件和Webpack的代码分析:const Home = resolve => { require.ensure(['../components/Home.vue'], () => { resolve(require('../components/Home.vue')) })};
    打包之后是: image.png

打包之后的文件命名问题

const routes = [{ path: "/", redirect: "/home" },
  {
    path: "/home",
    component: () =>
      import ( /*webpackChunkName:"home-chunk"*/ "../package/Home.vue")
  },
  {
    path: "/about",
    component: () =>
      import ( /*webpackChunkName:"about-chunk"*/ "../package/About.vue")
  }
];
image.png
{
    path: "/:pathMatch(.*)*",
    component: () =>
      import ( /*webpackChunkName:"about-chunk"*/ "../package/NotFound.vue")
  }

使用

<p>{{$route.params.pathMatch}}</p>

路由嵌套

image.png
  1. 先写出两个组件文件
  2. 将其导入到路由配置文件当中进行配置
{
            //父组件
      path: '/home',
      component: Home,
      //定义子路由
      children: [{
     //默认进入的路径
        path: '',
        redirect: 'message'
      }, {
        path: 'message',
        component: Message
      }, {
        path: 'news',
        component: News
      }]
    }
<template>
  <div>
<p>我是首页组件</p>
<router-link to="/home/news">新闻</router-link>
<router-link to="/home/message">消息</router-link>
<router-view></router-view>
  </div>
</template>

传递参数

<router-link :to="{path:'/info',query:{name:'guo',age:18,hight:188}}" tag="button">关于</router-link>

$route$router的区别

<p>{{$route.query}}</p>
image.png image.png
homeClick(){
            this.$router.push('/home')
            console.log('homeclick');
        }
image.png

在setup()获取route和router的方法

image.png
变量是自定义的

router-link的v-slot


image.png

router-view的slot

动态添加路由

image.png

删除路由

image.png

导航守卫

vue-router提供了beforeEach和afterEach的钩子函数, 它们会在路由即将改变前和改变后触发

 //router是vue的实例
router.beforeEach((to, from, next) => {
  console.log(to);
  //matched[0]表示路由嵌套的父路由
  console.log(to.matched[0].meta.title);
  document.title = to.matched[0].meta.title
    //表示继续执行下一步
  next()
})
返回值

keep-alive 是 Vue 内置的一个组件,可以使被包含的组件保留状态,或避免重新渲染

<keep-alive exclude="message,User">
    <!-- exclude属性里面包含的是组建的name属性,且之间不能有空格,表示的是,只要里面包含的组件都不会背缓存 -->
        <router-view></router-view>
</keep-alive>
上一篇下一篇

猜你喜欢

热点阅读