IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> Vue笔记(五):路由基础 -> 正文阅读

[JavaScript知识库]Vue笔记(五):路由基础

路由用于组件间的跳转

首先定义组件:

const Foo = { template: '<div>foo</div>' }
const Bar = { template: '<div>bar</div>' }

这是我们现在实例用的组件,实际项目中一个组件可能就是一整个页面

接下来我们创建一个路由对象

const routes = [
  { path: '/foo', component: Foo },
  { path: '/bar', component: Bar }
]

// 创建路由对象
const router = new VueRouter({
  routes // (缩写)相当于 routes: routes,es6的新语法
})

路由对象创建完成后 我们在Vue对象中使用路由器

const app = new Vue({
  router
}).$mount('#app')

在模板中 我们使用router-link来导航

<div id="app">
  <h1>Hello App!</h1>
  <p>
    <!-- 使用 router-link 组件来导航. -->
    <!-- 通过传入 `to` 属性指定链接. -->
    <!-- <router-link> 默认会被渲染成一个 `<a>` 标签 -->
    <router-link to="/foo">Go to Foo</router-link>
    <router-link to="/bar">Go to Bar</router-link>
  </p>
  <!-- 路由出口 -->
  <!-- 路由匹配到的组件将渲染在这里 -->
  <router-view></router-view>
</div>

在实际项目中,一般会使用嵌套的router组件来渲染,并且路由的地址是动态组装的,上面的示例是比较简单的超链

接的形式

在路由中若传输了参数 可以在跳转后的Vue组件中通过this.$route.params.参数名获取

除此之外 在js中也可以进行路由跳转

// 当前路由的view跳转到 /home
router.push('home')

// 对象,  跳转到/home
router.push({ path: 'home' })

// 命名的路由   
router.push({ name: 'user', params: { userId: 123 }})

// 带查询参数,变成 /register?plan=private
router.push({ path: 'register', query: { plan: 'private' }})

嵌套路由

嵌套路由使用的非常广泛 因为实际的界面通常由很多组件组合而成 URL中的动态路径也需要组成某种结构

来看下面的代码

<div id="app">
  <router-view></router-view>
</div>
const User = {
  template: '<div>User {{ $route.params.id }}</div>'
}

const router = new VueRouter({
  routes: [
    { path: '/user/:id', component: User }
  ]
})

这里的 <router-view> 是最顶层的出口,渲染最高级路由匹配到的组件。同样地,一个被渲染组件同样可以包含自己的嵌套 <router-view>。例如,在 User 组件的模板添加一个 <router-view>

const User = {
  template: `
    <div class="user">
      <h2>User {{ $route.params.id }}</h2>
      <router-view></router-view>
    </div>
  `
}

那么这样的嵌套该怎么处理呢?我们需要在VueRouter的参数中使用children

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
        }
      ]
    }
  ]
})

注意 以/开头的嵌套路径为根路径 因此在children里面 path是没有/的

响应路由参数变化

1、使用$watch检测

const User = {
	template:'...',
	watch:{
		'$route' (to,from){
			///
		}
	}
}

2、使用导航守卫

const User = {
	template:'...',
	beforeRouteUpdate (to,from,next){
		///
	}
}

mode

hash:默认模式
history:history.pushState API 来完成 URL 跳转而无须重新加载页面。

导航守卫

router.beforeEach
全局前置守卫:导航触发,进入路由之前。

router.beforeResolve
全局解析守卫:在导航被确认之前,同时在所有组件内守卫和异步路由组件被解析之后,解析守卫就被调用。

router.afterEach
全局后置钩子:钩子不会接受 next 函数也不会改变导航本身。

在路由配置上直接定义 beforeEnter 守卫

组件内的守卫
beforeRouteEnter 进入路由前
beforeRouteUpdate (2.2 新增) 路由复制同一个组件(参数或查询的改变)
beforeRouteLeave 离开路由前

  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2021-09-10 10:46:10  更:2021-09-10 10:47:00 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/18 22:39:23-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码