vue嵌套路由与404重定向实现方法分析

news/2024/7/10 1:19:07 标签: vue
vue_0">第一部分: vue嵌套路由

嵌套路由是什么?

嵌套路由就是在一个被路由过来的页面下可以继续使用路由,嵌套也就是路由中的路由的意思。 比如在vue中,我们如果不使用嵌套路由,那么只有一个,但是如果使用,那么在一个组件中就还有,这也就构成了嵌套。

为什么要使用嵌套路由?

就比如在一个页面中, 在页面的上半部分,有三个按钮,而下半部分是根据点击不同的按钮来显示不同的内容,那么我们就可以在这个组件中的下半部分看成是一个嵌套路由,也就是说在这个组件的下面需要再来一个, 当我点击不同的按钮时,他们的router-link分别所指向的组件就会被渲染到这个中。

官网是怎么介绍的?

每次说到官网,就要说一说百度,百度搜索千万别用。。

要说官网举得这个图,本意是好的,但是描述起来累赘太多。吐个槽。。

这就是实际生活中的一个很好的应用界面, 通常是由多层嵌套的组件组合而成。 同样的, URL中各段动态路径也按照某种结构对应嵌套的各层组件。如上所示。

即user表示用户页, 而user就可以看成是vue中的一个单页面,对于一个user,一定要有哪一个用户,这里的foo(小明、小红)就代表了一个用户,这里的profile可以理解为个人主页,这里的posts可以理解为这个人所发表的文章, 而title可能是不变的,比如无论切换到这个人发表的文章,还是切换到这个人的个人主页,我们都希望在最上方显示同样的东西,而在切换的时候换的就是下面的部分,这个部分我们就可以用来写,那么,这,就是嵌套路由。

借助vue-router,使用嵌套路由配置,就可以很简单的表达这种关系。

<div id="app">
 <router-view></router-view>
</div>

前端全栈学习交流圈:866109386,面向1-3经验年前端开发人员,帮助突破技术瓶颈,提升思维能力,群内有大量PDF可供自取,更有干货实战项目视频进群免费领取。

const User = {
 template: `
  <div class="user">
   <h2>User {{ $route.params.id }}</h2>
   <router-view></router-view>
  </div>
 `
}
const router = new VueRouter({
 routes: [
  { path: '/user/:id', component: User,
   children: [
    {
     // 当 /user/:id/profile 匹配成功,
     // UserProfile 会被渲染在 User 的 <router-view> 中
     path: 'profile',
     component: UserProfile
    },
    {
     // 当 /user/:id/posts 匹配成功
     // UserPosts 会被渲染在 User 的 <router-view> 中
     path: 'posts',
     component: UserPosts
    },
    // 当 /user/:id 匹配成功,
    // UserHome 会被渲染在 User 的 <router-view> 中
    {
      path: '',
      component: UserHome
    },
     // ...其他子路由
   ]
  }
 ]
})

前端全栈学习交流圈:866109386,面向1-3经验年前端开发人员,帮助突破技术瓶颈,提升思维能力,群内有大量PDF可供自取,更有干货实战项目视频进群免费领取。

OK! 这大致就是嵌套路由了! 其中,第一段代码是在文件中放了, 这是最顶层的出口,渲染高级路由匹配到的组件。

从路由配置中,我们可以看到: 当路径是 /user/小明 或者 /user/小红 时, 就会把User渲染到页面中,这个渲染的就是顶级路由。 (:id就是小明、小红,)。 然后这个页面中就有一个嵌套路由,当然,如果url就是 /user/小明的话,那么这个二级路由是什么都不会显示的, 如果我们希望即使只是 /user/小明, 也得渲染点什么,那么我们就可以设置 path: “” 所对应的路由,这样,即使 /user/小明 也是可以显示更多的了。

如果我们想看小明的个人主页,就是 /user/小明/profile 这时就会把 UserProfile 组件渲染到这个二级路由中了。

如果我们想看小明发表的文章,就是 /user/小明/posts 这时就会把 UserPost 组件渲染到这个二级路由中, 这也就是二级路由了。

其实概念就这么多,是不是很简单呢!

但是还需要注意下面几点:

  1. 从上面的代码可以看出: 在组件中,我们可以通过 $route.params.id 来获取到user/小明/post 中的小明,这样,我们就可以进行个性化的设置了。

  2. 以 / 开头的嵌套路径会被当做根路径, 这可以让你充分的使用嵌套组件而无需设置嵌套的路径。

也就是说: 在上面的代码中,我们在children下,写path: “profile”, 就相当于拼接成了 /user/:id/profile ,当然,我们也可以直接写为 path: “/user/:id/profile” ,最终的结果是一样的,但是我个人认为后者的表示方法可以跟清晰的观察结构。 如果嵌套层数过多,可能会出错。

第二部分: 404重定向

有时,我们可能会输入错的 url, 或者不再存在等各种原因导致其不再能被访问,那么我们就可以对于这种情况进行重定向。 很简单,只要在路由中添加下面的代码就可以了:

{
   path: "*",
   redirect: "/"
}

即对于所有的(*代表所有)错误页面,我们都可以重定向到 “/” 中。
希望本文所述对大家vue.js程序设计有所帮助。


http://www.niftyadmin.cn/n/1301068.html

相关文章

Project窗口

窗口概述 在此视图中&#xff0c;可访问和管理属于项目的资源。 以下&#xff0c;Project窗口也称为Project浏览器。 Project浏览器的左侧面板将项目的文件夹结构显示为层级列表 通过单击从列表中选择文件夹时&#xff0c;文件夹内容将显示在右侧面板中。可单击小三角形来展开…

全特化终结这个递归模板

#include "stdafx.h" #include<iostream> using namespace std; template<typename T> class A {private: A<void*> impl; // 有个问题: A<T> 之中包含另一个 A<void*> 成员, 构成递归声明 public: void test(T* p) {…

JS的console['']常用输入方法汇总

1、console.log是最常用的输入方法&#xff0c;正常化输出语句&#xff0c;还具有print占位符整数&#xff08;%d||%i&#xff09;&#xff0c;浮点数&#xff08;%f&#xff09;&#xff0c;对象&#xff08;%o&#xff09;&#xff0c;字符&#xff08;%s&#xff09;; 2、co…

动多态和静多态

#include "stdafx.h" #include<iostream> using namespace std; /* 动多态: 通过虚函数实现的多态是绑定的和动态的: 1. 绑定的含义是:对于参与多态行为的类型,它们(具有多态行为)的接口是在公共基类的设计

checkbox在vue中的用法小结

前言 关于checkbox多选框是再常见不过的了&#xff0c;几乎很多地方都会用到&#xff0c;这两天在使用vue框架时需要用到checkbox多选功能&#xff0c;实在着实让我头疼&#xff0c;vue和原生checkbox用法不太一样&#xff0c;之前对于vue中用到过的checkbox也只是别人写好的组…

Scene窗口—Scene视图导航

Scene 视图导航 Scene 视图具有一组可用于快速有效移动的导航控件。 场景视图辅助图标 场景视图辅助图标 (Scene Gizmo) 位于 Scene 视图的右上角。此控件用于显示 Scene 视图摄像机的当前方向&#xff0c;并允许快速修改视角和投影模式。 场景视图辅助图标在立方体的每一面都…

Vue 实现双向绑定的几种方法

1. v-model 指令 <input v-model"text" /> 上例不过是一个语法糖&#xff0c;展开来是&#xff1a; <input:value"text"input"e > text e.target.value" />2. .sync 修饰符 <my-dialog :visible.sync"dialogVisible&…

Builder建造者模式

建造者模式的概念&#xff1a;将一个复杂的对象的构建与它的表示分离&#xff0c;使得同样的构建过程可以有不同的表示。嗨&#xff0c;这个概念看起来总是这么深奥难懂。大概的意思&#xff0c;就是一套的构建过程可以有不同的产品&#xff08;表示&#xff09;出来。这些产品…