Vue-router的引入和安装

news/2024/11/30 3:24:48/

什么是Vue-Router?

Vue路由器是Vue.js的官方路由器,它与Vue.js核心深度集成,使用Vue轻松构建单页应用程序变得轻而易举。功能包括:

  • 嵌套路线映射

  • 动态路由

  • 模块化,基于组件的路由器配置

  • 路由参数,查询,通配符

  • 查看由Vue.js过渡系统提供动力的过渡效果

  • 细粒度的导航控制

  • 带有自动活动CSS类的链接

  • HTML5历史记录模式或哈希模式

  • 可自定义的滚动行为

  • 网址的正确编码

路由的核心:改变Url,但页面不进行整体刷新 ,路由理解为指向

路由表,是一个映射表,一个路由就是一组映射关系。

形式: key : value key:表示路由 value:可为function(后台路由)或为 Component(组件)

安装:

直接下载 / CDN#

https://unpkg.com/vue-router@4

Unpkg.com 提供了基于 npm 的 CDN 链接。上述链接将始终指向 npm 上的最新版本。 你也可以通过像 https://unpkg.com/vue-router@4.0.15/dist/vue-router.global.js 这样的 URL 来使用特定的版本或 Tag。

npm

npm install vue-router@4

yarn

yarn add vue-router@4

安装成功后,会在package.json 中显示出来

使用 例子:

一、创建一个文件夹router 新建一个js文件来 进行路由集中管理

在新建一个views来存储组件

组件代码:

<template><div>这是Login组件</div>
</template>

app.vue首页

注意:

router-link#

请注意,我们没有使用常规的 a 标签,而是使用一个自定义组件 router-link 来创建链接。这使得 Vue Router 可以在不重新加载页面的情况下更改 URL,处理 URL 的生成以及编码。我们将在后面看到如何从这些功能中获益。

router-view#

router-view 将显示与 url 对应的组件。你可以把它放在任何地方,以适应你的布局。

<script setup></script><template><h1>Hello App!</h1><p><!--使用 router-link 组件进行导航 --><!--通过传递 `to` 来指定链接 --><!--`<router-link>` 将呈现一个带有正确 `href` 属性的 `<a>` 标签--><router-link to="/Login">Go to Home</router-link></p><!-- 路由出口 --><!-- 路由匹配到的组件将渲染在这里 --><router-view></router-view>
</template><style></style>

在路由js进行配置

import {createRouter,createWebHashHistory }  from 'vue-router'// 1. 定义路由组件.
// 也可以从其他文件导入
import Login from '../views/Login.vue'// 2. 定义一些路由
// 每个路由都需要映射到一个组件。
// 我们后面再讨论嵌套路由。
const routes = [{ path: '/Login', component: Login },
]// 3. 创建路由实例并传递 `routes` 配置
// 你可以在这里输入更多的配置,但我们在这里
// 暂时保持简单
const router = createRouter({// 4. 内部提供了 history 模式的实现。为了简单起见,我们在这里使用 hash 模式。history: createWebHashHistory(),routes, // `routes: routes` 的缩写
})//导出router
export  default  router;

在main.js 进行配置

vue-router带参的动态路由配置

新建一个路由

app.vue

如果想要这个参数显示出来要使用 $route

看看$route 这个里面包含着什么

可以看出从里面取得了链接等信息

在看看在组合api setup里怎么获取 通过 import { useRoute } from 'vue-router'

<template><div>这是首页</div>
</template>
<script setup>import { useRoute } from 'vue-router'console.log(useRoute())
</script>

正则传递参数 指定

嵌套路由

在想要在嵌套的路由上加上 children

通过js跳转页面

导航到不同的位置#

注意:在 Vue 实例中,你可以通过 $router 访问路由实例。因此你可以调用 this.$router.push。

想要导航到不同的 URL,可以使用 router.push 方法。这个方法会向 history 栈添加一个新的记录,所以,当用户点击浏览器后退按钮时,会回到之前的 URL。

当你点击 <router-link> 时,内部会调用这个方法,所以点击 <router-link :to="..."> 相当于调用 router.push(...) :

声明式

编程式

<router-link :to="...">

router.push(...)

该方法的参数可以是一个字符串路径,或者一个描述地址的对象。例如:

// 字符串路径
router.push('/users/eduardo')// 带有路径的对象
router.push({ path: '/users/eduardo' })// 命名的路由,并加上参数,让路由建立 url  需要给路由配置 添加一个name 属性后才可以指定name
router.push({ name: 'user', params: { username: 'eduardo' } })// 带查询参数,结果是 /register?plan=private
router.push({ path: '/register', query: { plan: 'private' } })// 带 hash,结果是 /about#team
router.push({ path: '/about', hash: '#team' })

替换页面以及历史堆栈中前进和后退

替换当前位置#

它的作用类似于 router.push,唯一不同的是,它在导航时不会向 history 添加新记录,正如它的名字所暗示的那样——它取代了当前的条目。

声明式

编程式

<router-link :to="..." replace>

router.replace(...)

也可以直接在传递给 router.push 的 routeLocation 中增加一个属性 replace: true :

js

router.push({ path: '/home', replace: true })// 
相当于router.replace({ path: '/home' })

横跨历史#

在 Vue School 上观看免费视频课程

该方法采用一个整数作为参数,表示在历史堆栈中前进或后退多少步,类似于 window.history.go(n)。

例子

js

// 向前移动一条记录,与 router.forward() 相同router.go(1)// 返回一条记录,与 router.back() 相同router.go(-1)// 前进 3 条记录router.go(3)// 如果没有那么多记录,静默失败router.go(-100)router.go(100)

篡改历史#

你可能已经注意到,router.push、router.replace 和 router.go 是 window.history.pushState、window.history.replaceState 和 window.history.go 的翻版,它们确实模仿了 window.history 的 API。

因此,如果你已经熟悉 Browser History APIs,在使用 Vue Router 时,操作历史记录就会觉得很熟悉。

值得一提的是,无论在创建路由器实例时传递什么样的 history 配置,Vue Router 的导航方法( push、replace、go )都能始终正常工作。

命名视图

有时候想同时 (同级) 展示多个视图,而不是嵌套展示,例如创建一个布局,有 sidebar (侧导航) 和 main (主内容) 两个视图,这个时候命名视图就派上用场了。你可以在界面中拥有多个单独命名的视图,而不是只有一个单独的出口。如果 router-view 没有设置名字,那么默认为 default。

html

<router-view class="view left-sidebar" name="LeftSidebar">
</router-view><router-view class="view main-content"></router-view>
<router-view class="view right-sidebar" name="RightSidebar"></router-view>

一个视图使用一个组件渲染,因此对于同个路由,多个视图就需要多个组件。确保正确使用 components 配置 (带上 s):

const router = createRouter({history: createWebHashHistory(),routes: [{path: '/',components: {default: Home,// LeftSidebar: LeftSidebar 的缩写LeftSidebar,// 它们与 `<router-view>` 上的 `name` 属性匹配RightSidebar,},},],
})

页面通过 <router-view name="" /> 来展示组件内容

<!-- UserSettings.vue -->
<div><h1>User Settings</h1><NavBar /><router-view /><router-view name="helper" />
</div>

重定向和别名

重定向也是通过 routes 配置来完成,下面例子是从 /home 重定向到 /:

js

const routes = [{ path: '/home', redirect: '/' }]

重定向的目标也可以是一个命名的路由:

js

const routes = [{ path: '/home', redirect: { name: 'homepage' } }]

甚至是一个方法,动态返回重定向目标:

js

const routes = [{// /search/screens -> /search?q=screenspath: '/search/:searchText',redirect: to => {// 方法接收目标路由作为参数// return 重定向的字符串路径/路径对象return { path: '/search', query: { q: to.params.searchText } }},},{path: '/search',// ...},
]

别名# alias 属性(也可以通过这个属性访问)

重定向是指当用户访问 /home 时,URL 会被 / 替换,然后匹配成 /。那么什么是别名呢?

将 / 别名为 /home,意味着当用户访问 /home 时,URL 仍然是 /home,但会被匹配为用户正在访问 /。

上面对应的路由配置为:

const routes = [{ path: '/', component: Homepage, alias: '/home' }]

通过别名,你可以自由地将 UI 结构映射到一个任意的 URL,而不受配置的嵌套结构的限制。使别名以 / 开头,以使嵌套路径中的路径成为绝对路径。你甚至可以将两者结合起来,用一个数组提供多个别名:

const routes = [{path: '/users',component: UsersLayout,children: [// 为这 3 个 URL 呈现 UserList// - /users// - /users/list// - /people{ path: '', component: UserList, alias: ['/people', '/list'] },],},
]

如果你的路由有参数,请确保在任何绝对别名中包含它们: alias: ['/:id', '']

const routes = [{path: '/users/:id',component: UsersByIdLayout,children: [// 为这 3 个 URL 呈现 UserDetails// - /users/24// - /users/24/profile// - /24{ path: 'profile', component: UserDetails, alias: ['/:id', ''] },],},
]

将 props 传递给路由组件#

在 Vue School 上观看免费视频课程

在你的组件中使用 $route 会与路由紧密耦合,这限制了组件的灵活性,因为它只能用于特定的 URL。虽然这不一定是件坏事,但我们可以通过 props 配置来解除这种行为:

我们可以将下面的代码

const User = {template: '<div>User {{ $route.params.id }}</div>'
}
const routes = [{ path: '/user/:id', component: User }]

对于有命名视图的路由,你必须为每个命名视图定义 props 配置:

js

const routes = [{path: '/user/:id',components: { default: User, sidebar: Sidebar },props: { default: true, sidebar: false }}
]

页面获取通过:

在组件api里直接接受通过:

导航守卫

1、什么是导航守卫?

正如其名,vue-router 提供的导航守卫主要用来通过跳转或取消的方式守卫导航。这里有很多方式植入路由导航中:全局的,单个路由独享的,或者组件级的。

如我要进入首页页面,我要判断我是否登录了 如果登录了 才能进入首页

2、配置

1、全局前置守卫#

你可以使用 router.beforeEach 注册一个全局前置守卫:

// 全局导航守卫
//next相当于一个关卡通行证的意思     to是要去的页面  from 为什么地方来的
router.beforeEach((to,from,next)=>{})

2、在需要使用的路由上添加关卡

  { path: '/index/:username',component: Index ,// 守卫路由配置beforeEnter:(to,from,next)=>{console.log(to);console.log(from);//  模拟tokensif(123==123214233){next()}}},  //带参 

组件内的守卫#

最 后,你可以在路由组件内直接定义路由导航守卫(传递给路由配置的)

可用的配置 API#

你可以为路由组件添加以下配置:

  • beforeRouteEnter

  • beforeRouteUpdate

  • beforeRouteLeave

const UserDetails = {template: `...`,beforeRouteEnter(to, from) {// 在渲染该组件的对应路由被验证前调用// 不能获取组件实例 `this` !// 因为当守卫执行时,组件实例还没被创建!},beforeRouteUpdate(to, from) {// 在当前路由改变,但是该组件被复用时调用// 举例来说,对于一个带有动态参数的路径 `/users/:id`,在 `/users/1` 和 `/users/2` 之间跳转的时候,// 由于会渲染同样的 `UserDetails` 组件,因此组件实例会被复用。而这个钩子就会在这个情况下被调用。// 因为在这种情况发生的时候,组件已经挂载好了,导航守卫可以访问组件实例 `this`},beforeRouteLeave(to, from) {// 在导航离开渲染该组件的对应路由时调用// 与 `beforeRouteUpdate` 一样,它可以访问组件实例 `this`},
}

beforeRouteEnter 守卫 不能 访问 this,因为守卫在导航确认前被调用,因此即将登场的新组件还没被创建。

不过,你可以通过传一个回调给 next 来访问组件实例。在导航被确认的时候执行回调,并且把组件实例作为回调方法的参数:

js

beforeRouteEnter (to, from, next) 
{ next(vm => {    // 通过 `vm` 访问组件实例  })
}

路由懒加载

当打包构建应用时,JavaScript 包会变得非常大,影响页面加载。如果我们能把不同路由对应的组件分割成不同的代码块,然后当路由被访问的时候才加载对应组件,这样就会更加高效。

Vue Router 支持开箱即用的动态导入,这意味着你可以用动态导入代替静态导入:

通俗易懂的说就是用到时在加载

使用:

将Componet 以函数的形式来写:

// 将
// import UserDetails from './views/UserDetails.vue'
// 替换成
const UserDetails = () => import('./views/UserDetails.vue')const router = createRouter({// ...routes: [{ path: '/users/:id', component: UserDetails }],
})

如何进行状态管理

新建一个js来进行全局参数的配置

根组件vue通过provide注入

引入 store

子组件通过 inject来获取


http://www.ppmy.cn/news/676245.html

相关文章

vue路由的安装和配置

vue路由的安装和配置 1.安装 1.安装现成的工具包vue-router npm i vue-router3.5.2 -S2.在src中新建router/index.js import Vue from vue import VueRouter from vue-router//调用 Vue.use()函数&#xff0c;把VueRouter 安装为Vue的插件 Vue.use(VueRouter);//创建路由的…

九州通供应链解决方案(CCERP)

信息化是现代物流信息化的解决方案。在不断适应企业发展的信息化进程中&#xff0c;九州通医药物流不断的创新&#xff0c;研发出适合九州通本身和现代医药系统的各种平台和解决方案的系统&#xff1a;例如&#xff1a;九州通供应链解决方案&#xff08;CCERP&#xff09;、九州…

vue3安装路由简单教程:四步完成

1.安装路由&#xff1a;npm install vue-router --save 2.修改App.vue <template><img src"./assets/logo.png"><div id"app"><router-view/></div> </template><script> export default {name: App } </s…

路由的使用步骤

1.下载 npm install vue-router -S npm install vue-router --save 我们推荐 使用本地下载好的vue.js和vue-router.js 引入vue.js和vue-router.js <!-- 顺序不能颠倒 --><script src"./js/vue.js"></script><script src"./js/vue-route…

Vue路由(安装保姆教程)

路由原理 原理&#xff1a;地址发生 变化&#xff0c;刷新页面&#xff0c;检测地址栏变化切换div更新视图 hash路由 事件window.hashchange 历史记录路由 window.onpopstate history.pushState(state, title, url) 例子&#xff08;普通&#xff0c;建议不要看&#xff0…

对于小白来说如何装一个路由器?

由于图片是网上抓图&#xff0c;可能与现在路由器有点区别&#xff0c;请以实物为准&#xff0c;网上抓的图望作者体谅一下哈。 小白如何装路由器&#xff1f; 收到路由器之后打开包装&#xff1a; 1.首先我们把路由器电源插上&#xff0c;再将网线接入WAN的卡槽&#x…

怎么正确设置路由器

一、设备&#xff1a;买一个路由器&#xff0c;如TP-LINK&#xff08;TL-R402M&#xff09;90元左右&#xff0c;有一个WAN口和四个LAN口&#xff0c;另加上两条的两端都钳有水晶头的网线。 二、接法&#xff1a;把插到台式机的网线水晶头&#xff08;另一端已接ADSL的&#x…

Vue路由的安装

1.npm安装路由 在项目中输入以下命令 安装全局路由 npm install vue-router -S 安装之后在项目文件package.json内会出现 "vue-router": "^3.5.2" 2.在src内新建router目录 添加index.js作为总路由 // 引入依赖 import Vue from vue import VueRouter…