Vue踩坑---路由跳转

路由的功能是实现页面跳转,所以,要跳转的页面,必须在路由里面注册

一  使用<router-link>跳转路由


一般格式:  

vue界面内容:
<router-link :to="{path: 'DataServerPage'}">数据服务</router-link>
//在编译之后<router-link>会被渲染为<a>标签,to会被渲染为href,当<router-link>被点击的时候,url会发生相应的变化

路由index.js里面的内容:
{
    path: '/DataServerPage',
    name: 'DataServerPage',
    component: DataServerPage
}
//路由的功能是实现页面跳转,对页面实现路由选择,所以,需要跳转的东西,都放在路由里面,由路由进行跳转抉择





一下文章是转载别人的,仅仅供自己学习使用,不做他用,如有侵权,请联系我删除

Vue 爬坑之路(三)—— 使用 vue-router 跳转页面

使用 Vue.js 做项目的时候,一个页面是由多个组件构成的,所以在跳转页面的时候,并不适合用传统的 href,于是 vue-router 应运而生。

官方文档: https://router.vuejs.org/zh-cn/essentials/getting-started.html

 

有很多朋友找我要 demo,但是博客中的这个案例被我删掉了,我只好随手写了一个超简单的 demo,希望能有所帮助

链接: https://pan.baidu.com/s/1pMfi5tD  密码: pjwx

 

这次的实例主要实现下图的效果:

 

项目结构:

 

 

一、配置 Router

 用 vue-cli 创建的初始模板里面,并没有 vue-router,需要通过 npm 安装

cnpm i vue-router -D

安装完成后,在 src 文件夹下,创建一个 routers.js 文件,和 main.js 平级

然后在 router.js 中引入所需的组件,创建 routers 对象

复制代码
import Home from './components/home.vue'

const routers = [
  {
    path: '/home',
    name: 'home',
    component: Home
  },
  {
    path: '/',
    component: Home
  },
]
export default routers

复制代码

在创建的 routers 对象中, path 配置了路由的路径,component 配置了映射的组件

需要注意的是,export default routers 必须写在文件底部,而且后面还需要接一空行,否则无法通过 ESlint 语法验证

 

然后 main.js 也需要修改:

复制代码
import Vue from 'vue'
import VueRouter from 'vue-router'
import routers from './routers'
import App from './App'

Vue.use(VueRouter)

const router = new VueRouter({
  mode: 'history',
  routes: routers
})

new Vue({
  el: '#app',
  router,
  render: h => h(App)
})
复制代码

在创建的 router 对象中,如果不配置 mode,就会使用默认的 hash 模式,该模式下会将路径格式化为 #! 开头。

添加 mode: 'history' 之后将使用 HTML5 history 模式,该模式下没有 # 前缀,而且可以使用 pushState 和 replaceState 来管理记录。

关于 HTML5 history 模式的更多内容,可以参考官方文档:https://router.vuejs.org/zh-cn/essentials/history-mode.html

 

 

二、嵌套路由

在这个实例中,为了加深项目层级,App.vue 只是作为一个存放组件的容器:

其中 <router-view> 是用来渲染通过路由映射过来的组件,当路径更改时,<router-view> 中的内容也会发生更改

上面已经配置了两个路由,当打开 http://localhost:8080 或者 http://localhost:8080/home 的时候,就会在 <router-view> 中渲染 home.vue 组件

 

home.vue 是真正的父组件,first.vue、login.vue 等子组件都会渲染到 home.vue 中的 <router-view>

 

如此一来,就需要在一级路由中嵌套二级路由,修改 routers.js

复制代码
import Home from './components/home.vue'
import First from './components/children/first.vue'
import Login from './components/children/login.vue'

const routers = [
  {
    path: '/',
    component: Home,
   children: [ 
   { 
    path: '/', 
     component: Login    }   ]
  },
  {
    path: '/home',
    name: 'home',
    component: Home,
    children: [
      {
        path: '/',
        name: 'login',
        component: Login
      },
      {
        path: 'first',
        name: 'first',
        component: First
      } 
    ]
  }
]

export default routers
复制代码

在配置的路由后面,添加 children,并在 children 中添加二级路由,就能实现路由嵌套

配置 path 的时候,以 " / " 开头的嵌套路径会被当作根路径,所以子路由的 path 不需要添加 " / "

 

 

三、使用 <router-link> 映射路由

home.vue 中引入了 header.vue 组件,其中含有导航菜单

当点击导航菜单的时候,会切换 home.vue 中 <router-view> 中的内容

这种只需要跳转页面,不需要添加验证方法的情况,可以使用 <router-link> 来实现导航的功能:

在编译之后,<router-link> 会被渲染为 <a> 标签, to 会被渲染为 href,当 <router-link> 被点击的时候,url 会发生相应的改变

如果使用 v-bind 指令,还可以在 to 后面接变量,配合 v-for 指令可以渲染导航菜单

 

如果对于所有 ID 各不相同的用户,都要使用 home 组件来渲染,可以在 routers.js 中添加动态参数

{ 
    path: '/home/:id',
    component: Home
}

这样 "/home/user01"、"/home/user02"、"/home/user03" 等路由,都会映射到 Home 组件

然后还可以使用 $route.params.id 来获取到对应的 id

 

 

四、编程式导航

实际情况下,有很多按钮在执行跳转之前,还会执行一系列方法,这时可以使用 this.$router.push(location) 来修改 url,完成跳转

push 后面可以是对象,也可以是字符串:

复制代码
// 字符串
this.$router.push('/home/first')

// 对象
this.$router.push({ path: '/home/first' })

// 命名的路由
this.$router.push({ name: 'home', params: { userId: wise }})
复制代码

 

 

五、前车之鉴

在学习的过程中,遇到一个困扰许久的问题,大概是从 first 组件跳转回 login 之后,无法再跳转回去。但是 url 已经被修改,刷新页面也能正常显示。

这是因为我在 first.vue 组件中的 data 里面没有写 return

 

在 vue 组件中,data 必须写为函数,且需要用 return 来返回参数。但是当 data 为空时,即使不写 return 也不会报错,所以导致了上面的问题。


<think>好的,我现在需要帮用户介绍一下vue-router的跳转特效。首先,我得回忆一下vue-router的相关知识,特别是关于页面过渡效果的部分。用户可能想要在切换路由时添加动画效果,比如淡入淡出、滑动等。我得先确定vue-router本身是否支持这样的特效,或者是否需要结合Vue的过渡组件来实现。 嗯,对了,Vue提供了<transition>组件来处理进入/离开的动画,而vue-router可以和这个组件结合使用。所以,用户需要的是在路由切换时,如何利用这个<transition>组件来添加特效。接下来,我需要整理一下具体的步骤和示例代码。 首先,用户需要在App.vue或者路由视图的外层包裹<transition>组件。然后,通过name属性指定动画的名称,这样CSS类名就可以对应起来。例如,使用name="fade"的话,CSS类就是.fade-enter-active、.fade-leave-active等。这时候,用户需要编写对应的CSS过渡或动画效果。 然后,可能需要考虑不同的过渡效果,比如淡入淡出、滑动、缩放等。每个效果都需要不同的CSS定义。例如,淡入淡出需要改变透明度,滑动可能需要改变transform属性。此外,还要注意过渡的模式mode,防止同时发生进入和离开的动画,通常使用mode="out-in"或"in-out"。 另外,用户可能想知道如何根据不同的路由设置不同的动画效果。这时候,可以结合路由的元信息meta字段,在<transition>组件中动态绑定name属性,从而根据目标路由的配置应用不同的动画。 还有,可能需要提到钩子函数,比如使用beforeRouteUpdate来在导航前触发动画,或者结合JavaScript动画库如Velocity.js来实现更复杂的动画效果。不过这部分可能属于进阶内容,用户如果基础较弱的话,可能需要先掌握基本的CSS过渡。 需要注意的常见问题包括:动画不生效,可能是因为CSS类名写错了,或者没有正确设置过渡属性;还有可能是在初始渲染时不想有动画,可以使用appear属性来控制;另外,过渡模式的选择也很重要,避免页面布局混乱。 最后,应该给出一个完整的示例,从安装vue-router开始,配置路由,然后在App.vue中添加过渡组件,并编写CSS动画,演示如何实现淡入淡出和左右滑动的效果。同时,提醒用户在实际项目中可能需要调整动画的持续时间和样式,以达到最佳用户体验。 需要确保回答结构清晰,分步骤说明,并且代码示例正确,符合LaTeX格式要求。可能还需要指出一些注意事项和常见问题,帮助用户避免。总之,整个思考过程需要从基本概念入手,逐步深入,覆盖不同的实现方式和可能的扩展,确保用户能够理解并应用vue-router的跳转特效。</think>### Vue Router 跳转特效实现详解 在 Vue Router 中实现页面跳转特效,本质是通过 Vue 的 `<transition>` 组件与路由视图 `<router-view>` 结合,利用 CSS 过渡或动画实现视觉效果。以下是分步说明: --- #### **一、基础实现** 1. **包裹路由视图** 在 `App.vue` 中,用 `<transition>` 包裹 `<router-view>`,并指定动画名称: ```html <template> <div id="app"> <transition name="fade" mode="out-in"> <router-view></router-view> </transition> </div> </template> ``` - `name="fade"`: 关联 CSS 类名前缀 - `mode="out-in"`: 确保当前页面离开动画完成后,再触发新页面进入动画 2. **编写 CSS 过渡** 在样式部分定义动画效果: ```css .fade-enter-active, .fade-leave-active { transition: opacity 0.5s; } .fade-enter, .fade-leave-to { opacity: 0; } ``` --- #### **二、进阶特效示例** 1. **左右滑动效果** ```css .slide-left-enter-active, .slide-left-leave-active, .slide-right-enter-active, .slide-right-leave-active { transition: transform 0.3s; } .slide-left-enter { transform: translateX(100%); } .slide-left-leave-to { transform: translateX(-100%); } .slide-right-enter { transform: translateX(-100%); } .slide-right-leave-to { transform: translateX(100%); } ``` 2. **动态绑定动画名称** 通过路由元信息动态切换特效: ```html <transition :name="transitionName"> <router-view></router-view> </transition> <script> export default { data() { return { transitionName: 'fade' } }, watch: { $route(to, from) { this.transitionName = to.meta.transition || 'fade' } } } </script> ``` 路由配置: ```javascript { path: '/detail', component: DetailPage, meta: { transition: 'slide-left' } } ``` --- #### **三、高阶技巧** 1. **JavaScript 钩子动画** 结合第三方库(如 GSAP)实现复杂动画: ```html <transition @before-enter="beforeEnter" @enter="enter" @leave="leave" :css="false" > <router-view></router-view> </transition> <script> import gsap from 'gsap' export default { methods: { beforeEnter(el) { gsap.set(el, { opacity: 0, x: 100 }) }, enter(el, done) { gsap.to(el, { opacity: 1, x: 0, duration: 0.5, onComplete: done }) }, leave(el, done) { gsap.to(el, { opacity: 0, x: -100, duration: 0.3, onComplete: done }) } } } </script> ``` --- #### **四、注意事项** 1. **CSS 命名规范** 若 `<transition name="fade">`,需确保 CSS 类名为: - `.fade-enter-active` (进入激活状态) - `.fade-leave-active` (离开激活状态) - `.fade-enter` / `.fade-enter-to` (进入起点/终点) - `.fade-leave` / `.fade-leave-to` (离开起点/终点) 2. **初始渲染禁用动画** 添加 `appear` 属性可控制首次加载是否触发动画: ```html <transition name="fade" appear> <router-view></router-view> </transition> ``` --- #### **五、效果对比公式** 设动画时间为 $t$,位移距离为 $d$,则匀速滑动效果的 CSS 可表示为: $$ \text{transition: transform } t \text{ ease;} $$ 加速度滑动效果: $$ \text{transition: transform } t \text{ cubic-bezier(0.25, 0.1, 0.25, 1);} $$ --- 通过上述方法,可灵活实现从基础到复杂的路由跳转特效,提升用户体验。实际开发中建议通过 `transition` 的 `mode` 属性控制动画时序,避免布局错乱。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值