06-vue2路由

路由出现的背景

在vue中切换页面,实际上是切换组件,我们面临下面的问题:

http://localhost:8080/#/movies

如何根据路径中的地址选择不同的组件?

把选择的组件放在哪个位置?

怎样无刷新的切换组件?

路由插件

安装路由插件

npm i vue-router

使用路由插件,在main.js中

import Vue from 'vue'
import VueRouter from 'vue-router'

Vue.use(VueRouter); // Vue.use(插件)  在Vue中安装插件

const router = new VueRouter({
  // 路由配置
})
new Vue({
  ...,
  router
})
路由的基本使用

vue-router 匹配到的组件会渲染到<router-view>组件所在的位置。

// 路由配置
const router = new VueRouter({
  routes: [ // 路由规则
    // 当匹配到路径 /foo 时,渲染 Foo 组件
    { path: '/foo', component: Foo },
    // 当匹配到路径 /bar 时,渲染 Bar 组件
  	{ path: '/bar', component: Bar }
  ]
})
<!-- App.vue -->
<div class="container">
  <div>
    <!-- 其他区域 -->
  </div>
  <div>
    <!-- 页面区域 -->
    <!-- vue-router 匹配到的组件会渲染到这里 使用<router-view>标签也可以-->
    <!-- 这个组件实际上是vue内部的一个组件-->
    <RouterView />
  </div>
</div>
路由模式

路由模式决定了:

1、路由从哪里获取访问路径

2、路由如何改变访问路径

vue-router提供了三种路由模式,以下是常见的两种

1、hash:默认值。路由从浏览器地址栏中的hash部分获取路径,改变路径也是改变的hash部分,改变hash不会导致页面刷新。但是在实际应用中我们需要改变除了hash之外的路径,因此需要使用下面的history模式。

http://localhost:8080/#/movies  -->  /movies  
http://localhost:8080/about#/movies  --> /movies  

2、history:路由从浏览器地址栏的location.pathname中获取路径,改变路径使用的H5的history api。需要浏览器支持history api

http://localhost:8080/#/movies  -->  /
http://localhost:8080/about#/movies  --> /about
http://localhost:8080/movies  --> /movies  
修改路由模式的方法
const router = new VueRouter({
  // 路由配置
    routes,//路由匹配规则
    mode: "history"
})
导航

当我们确定使用了history模式,使用传统的a元素,会刷新页面,随之带来的是请求html、js、css、执行js、创建vue应用、渲染全部组件树、挂载到指定的div中。如何做到不刷新,就不能使用传统的a元素,使用导航,就可以使用它来进行跳转

vue-router提供了全局的组件RouterLink,它的渲染结果是一个a元素

<RouterLink to="/blog">文章</RouterLink>
<!-- mode:hash 生成 -->
<a href="#/blog">文章</a>
<!-- mode:history 生成 -->
<!-- 为了避免刷新页面,vue-router实际上为它添加了点击事件,并阻止了默认行为,在事件内部使用hitory api更改路径 -->
<a href="/blog">文章</a>
路由匹配过程

1、首次请求,如:http://localhost:8080/,进行页面刷新,执行js,创建vue应用,进行渲染,当渲染到<RouterView />这个占位区域的时候,就会进行匹配,根据路由模式,得到路径,如history模式就会得到/,根据路由规则进行匹配,就会匹配到首页,就把首页渲染到<RouterView />这个占位区域。

2、当点击某个按钮需要切换页面时,通过<RouterLink>组件进行导航,根据路由模式,得到路径,浏览器的地址栏会发生变化,路由插件会获取访问路径,到路由规则中匹配,匹配到的组件会渲染到<router-view>所在的位置。

激活状态

它解决的问题就是选中的效果。

默认情况下,vue-router会用 当前路径 匹配 导航路径 :

  • 如果当前路径是以导航路径开头,则算作匹配,会为导航的a元素添加类名router-link-active
  • 如果当前路径完全等于导航路径,则算作精确匹配,会为导航的a元素添加类名router-link-exact-active

例如,当前访问的路径是/blog,则:

导航路径类名
/router-link-active
/blogrouter-link-active router-link-exact-active (一个是匹配的/后的样式,一个是精确匹配到blog的样式)
/about
/message

可以为组件RouterLink添加bool属性exact,将匹配规则改为:必须要精确匹配才能添加匹配类名router-link-active。在各个组件RouterLink,通过配置exact的值不同,来控制不同的效果。

例如,当前访问的路径是/blog,则:

导航路径exact类名
/true
/blogfalserouter-link-active router-link-exact-active
/abouttrue
/messagetrue

例如,当前访问的路径是/blog/detail/123,则:

导航路径exact类名
/true
/blogfalserouter-link-active
/abouttrue
/messagetrue

另外,可以通过active-class属性更改匹配的类名,通过exact-active-class更改精确匹配的类名

命名路由

使用命名路由可以解除系统与路径之间的耦合

// 路由配置
const router = new VueRouter({
  routes: [ // 路由规则
    // 当匹配到路径 /foo 时,渲染 Foo 组件
    { name:"foo", path: '/foo', component: Foo },
    // 当匹配到路径 /bar 时,渲染 Bar 组件
  	{ name:"bar", path: '/bar', component: Bar }
  ]
})
<!-- 向to属性传递路由信息对象 RouterLink会根据你传递的信息以及路由配置生成对应的路径 -->
<RouterLink :to="{ name:'foo' }">go to foo</RouterLink>

### Wujie-Vue3框架中的路由配置与使用 在Wujie-Vue3框架中,为了实现React和Vue3应用之间的无缝集成,路由配置扮演着至关重要的角色。对于采用`wujie`作为微前端解决方案的应用来说,支持两种主要类型的路由模式Hash路由以及History路由[^2]。 当涉及到具体如何设置这些路由时,在Vue项目里通常会通过定义路径(path),名称(name)及组件(component)来创建路由对象,并最终导出路由表供应用程序使用。例如: ```javascript import Vue from 'vue'; import VueRouter from 'vue-router'; import MyPage from '../views/my-page.vue'; Vue.use(VueRouter); const routes = [ { path: '/my-page/*', // 非严格匹配,任何以 /my-page 开头的 URL 都会被导向到此页面 name: 'my-page', component: MyPage, }, ]; export default new VueRouter({ mode: 'hash', // 或者 'history' 来启用不同的路由模式 base: process.env.BASE_URL, routes }); ``` 值得注意的是,默认情况下上述代码片段展示了基于哈希(hash)模式下的路由配置方式。如果希望切换至历史(history)模式,则只需调整`mode`参数并移除URL中的`#`部分即可。 此外,在处理跨多个子应用间的导航链接时,可能还需要考虑一些额外的因素,比如确保父级容器能够正确解析来自不同源的相对地址等问题。这往往涉及到了解所使用的特定版本的`wujie`库所提供的API及其最佳实践指南。 #### 实现细节补充 为了让主应用和其他子应用之间更好地协作工作,建议遵循如下原则: - 统一管理全局状态; - 明确划分各模块职责边界; - 尽量减少不必要的重复加载资源文件次数; - 对于公共依赖项采取集中引入策略而非各自单独下载。 以上措施有助于构建更加高效稳定的分布式架构体系结构。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值