vue-cli学习笔记 02、Vue-router(路由)(二)

简介: vue-cli学习笔记 02、Vue-router(路由)(二)

三、嵌套路由(示例)


当我们有多页面时,就可以使用到嵌套路由。



此时我们在App.vue设置一个router-view,其他单独的页面中再嵌套router-view,就能够实现多页面的效果了。(实际上还是单页面,只不过进行了局部刷新罢了)



App.vue:源头,单页面


<template>
  <div id="nav">
    <router-view />
  </div>
</template>
<script>
export default {
  name: "App",
  components: {},
  methods: {
    linktoHome() {
      this.$router.push("/home");
    },
    linktoAbout() {
      this.$router.push("/About");
    },
  },
};
</script>
<style>
</style>



应用于App.vue的about、home:其中about.vue与home.vue你就可以看成是两个页面


router/index.js:路由配置
import { createRouter, createWebHashHistory } from 'vue-router'
import Home from '../views/home/Home.vue'
import message from '../views/about/components/message.vue'
import banner from '../views/about/components/banner.vue'
import news from '../views/home/components/news.vue'
const routes = [
  {
    path: '/',
    redirect: '/home'
  },
  {
    path: '/home',
    name: 'Home',
    component: Home,
    children: [
      { path: '/home/message', component: message }
    ]
  },
  {
    path: '/about',
    name: 'About',
    component: () => import(/* webpackChunkName: "about" */ '../views/about/About.vue'),
    children: [
      { path: '/about/news', component: news },
      { path: '/about/banner', component: banner }
    ]
  }
]
const router = createRouter({
  history: createWebHashHistory(),
  routes
})
export default router



home目录:


Home.vue
<template>
  welcome home
  <router-view />
</template>
<script>
export default {
  name: "Home",
  components: {},
  mounted() {
    this.$router.push("/home/message");
  },
};
</script>


news.vue:应用于Home.vue


<template>
  <div>
    <ul>
      <li>news1</li>
      <li>news2</li>
      <li>news3</li>
      <li>news4</li>
      <li>news5</li>
    </ul>
  </div>
</template>
<script>
export default {
  name: "news",
};
</script>
<style>
</style>



about目录:


About.vue
<template>
  welcome about
  <el-button type="danger" @click="handleclick">点我一下</el-button>
  <router-view />
</template>
<script>
export default {
  name: "About",
  components: {},
  mounted() {
    this.$router.push({
      path: "/about/news",
      query: {
        name: "changlu",
        age: 18,
      },
    });
    console.log(this.$route);
  },
  methods: {
    handleclick() {
      this.$router.push("/about/banner");
    },
  },
};
</script>
<style>
</style>


应用于About.vue的两个局部组件:


message.vue
<template>
  <div>
    <ul>
      <li>message1</li>
      <li>message2</li>
      <li>message3</li>
      <li>message4</li>
      <li>message5</li>
    </ul>
  </div>
</template>
<script>
export default {
  name: "message",
};
</script>
<style>
</style>



banner.vue


<template>
  <el-carousel indicator-position="outside">
    <el-carousel-item v-for="item in 4" :key="item">
      <h3>{{ item }}</h3>
    </el-carousel-item>
  </el-carousel>
</template>
<script>
export default {
  name: "banner",
};
</script>
<style>
.el-carousel__item h3 {
  color: #475669;
  font-size: 18px;
  opacity: 0.75;
  line-height: 300px;
  margin: 0;
}
.el-carousel__item:nth-child(2n) {
  background-color: #99a9bf;
}
.el-carousel__item:nth-child(2n + 1) {
  background-color: #d3dce6;
}
</style>




此时就能够实现多页面!



四、404页面实现


添加一个404组件:



router/index.js:进行路由配置
{
  path: "/404",
  name: "notFound",
  component: notfound
  },
      //匹配没有配置的路由路径
      {
          path: "/:pathMatch(.*)",
              redirect: '/404'
      }



五、进阶


5.1、导航守卫


导航守卫


全局前置守卫:一般用于全局,每次跳转一个路由都会触发


// 路由守卫
router.beforeEach((to, from, next) => {
  const isLogin = localStorage.isLogin   //一般是否登陆验证信息放置在localstorage中
  // to.name === 'Login'是为了防止拦截死循环!
  if (isLogin || to.name === 'Login') {
    next() // 执行了该函数才会进行跳转
  } else {
    // 跳转至指定login组件
    next({ name: 'Login' })
  }
})



路由独享守卫:针对于某个路由


{
  path: '/',
  name: 'Login',
  component: Login,
  beforeEnter: (to, from, next) => {  //若是能够登陆直接进行跳转主页
    const { isLogin } = localStorage
    isLogin ? next({ name: 'About' }) : next()
  }
},


组件内的守卫:针对于某个组件


全局后置钩子:路由跳转之后


相关文章
|
3月前
|
JavaScript 数据可视化
vue-cli学习一:vue脚手架的 vue-cli2和vue-cli3版本 创建vue项目,vue的初始化详解
这篇文章介绍了如何使用vue-cli 2和3版本来创建Vue项目,并详细说明了两者之间的主要区别。
138 5
vue-cli学习一:vue脚手架的 vue-cli2和vue-cli3版本 创建vue项目,vue的初始化详解
|
3月前
|
JavaScript 数据可视化
vue-cli学习二:vue-cli3版本 创建vue项目后,Runtime-Compiler和Runtime-only两个模式详解;vue项目管理器;配置文件的配置在哪,以及如何配置
这篇文章详细介绍了Vue CLI 3版本创建项目时的Runtime-Compiler和Runtime-only两种模式的区别、Vue程序的运行过程、render函数的使用、eslint的关闭方法,以及Vue CLI 2和3版本配置文件的不同和脚手架3版本创建项目的配置文件配置方法。
172 3
vue-cli学习二:vue-cli3版本 创建vue项目后,Runtime-Compiler和Runtime-only两个模式详解;vue项目管理器;配置文件的配置在哪,以及如何配置
|
3月前
|
资源调度 JavaScript 前端开发
vue3第一章基础:创建Vue3.0工程,包括使用vue-cli 创建、使用 vite 创建
vue3第一章基础:创建Vue3.0工程,包括使用vue-cli 创建、使用 vite 创建
38 5
|
3月前
|
资源调度 JavaScript 前端开发
路由管理:Vue Router的使用和配置技巧
【10月更文挑战第21天】路由管理:Vue Router的使用和配置技巧
58 3
|
3月前
|
JavaScript API
vue 批量自动引入并注册组件或路由等等
【10月更文挑战第12天】 vue 批量自动引入并注册组件或路由等等
|
3月前
|
JavaScript 前端开发 API
vue3中常用插件的使用方法:按需引入自定义组件,自动导入依赖包,自动生成路由,自动生成模拟数据
vue3中常用插件的使用方法:按需引入自定义组件,自动导入依赖包,自动生成路由,自动生成模拟数据
963 0
|
3月前
|
JavaScript 前端开发 UED
vue中vue-router路由懒加载(按需加载)的作用以及常见的实现方法
vue中vue-router路由懒加载(按需加载)的作用以及常见的实现方法
232 1
|
3月前
|
JavaScript 前端开发 UED
|
3月前
|
JavaScript 前端开发 API
前端技术分享:Vue.js 动态路由与守卫
【10月更文挑战第1天】前端技术分享:Vue.js 动态路由与守卫
|
2月前
|
JavaScript UED
"Vue实战技巧大揭秘:一招解决路由跳转页面不回顶部难题,让你的单页面应用用户体验飙升!"
【10月更文挑战第23天】在Vue单页面应用中,点击路由跳转时,默认情况下页面不会自动滚动到顶部,这可能影响用户体验。本文通过一个新闻网站的案例,介绍了如何使用Vue-router的全局前置守卫和`scrollBehavior`方法,实现路由跳转时页面自动滚动到顶部的功能,提升用户浏览体验。
118 0