vue——路由之路由跳转、路由传参、路由嵌套、路由模式

 相关认识:

后端路由:对于前端的网络请求,不同的pathname,去执行后端的不同业务

前端路由:不同的网址对应各自的页面

vue的前端路由:SPA应用要做出路由效果,就得判断当前网址,然后切换组件

vue-router就是专门做切换组件的功能,它是一个单独的技术,依赖vue 就像jQuery和dom操作一样

路由引入:

  1. cdn引入
  2. npm下载引入使用
  3. cli安装

一、路由跳转

router-view标签:

  • 当地址栏的网址改变时 如果新网址与router中注册的路由匹配就会加载注册的组件渲染到当前组件的这个标签上

(一)标签跳转

     只是普通的跳转页面,没有判断等逻辑控制

(1)a标签跳转

  • a标签会请求服务器 然后刷新页面 因此用在链接外部网络
  <a href="/login">go login-a标签跳转</a>

(2)router-link标签跳转

  • 渲染到页面也是a标签 但是只是改变了地址栏的网址并没有重新加载页面
  • router-link提供跳转到某个路由的功能 如果没有匹配到路由就会跳转失败
  • 路由的底层就是采用history去监听地址栏的变化 然后把当前App组件中的router-view切换了
  • 因此用在网站内部的路由跳转 
<router-link to="/login">go login-router-link标签跳转</router-link>
<router-link :to="{path:'/login'}">go login-router-link标签跳转</router-link>

二者区别:

        router-link用于跳路由 a用于跳网址  

        router-link传参可以传对象  a只能传字符串  

(二)编程式跳转-js代码

  • 编程式跳转: this.$router.push({path:"路由"})
  • 这种跳转方式用js代码写逻辑点击后跳转
<button @click="gologin">js代码写跳转--编程式跳转</button>

   在方法中设置跳转: 

gologin() {
      // this.$router:绑定在组件原型链上的路由对象
      this.$router.push("/login");
      //也可以是: this.$router.push({path:"/login"})
    }

 (三)示例

二、路由传参

(一)query传参

  • query传参:把参数放在querystring字段中  即 ? 之后

跳转传参:

跳转4种:

  • <router-link to="/info?id=1&pwd=123">go info</router-link>
  • <router-link :to="{path:'/info',query:{id:1,title:'标题'}}"></router-link>
  •  this.$router.push("/info?id=1&pwd=123")
  • this.$router.push({path:"/info",query:{id:1,title:'标题'}})

接收1种:

  • this.$route.query

在created之后的所有地方 接受获取数据,如果没有传参 这个值就没有

 (二)动态路由(params)传参

  •  params传参:把参数放在pathname中  即 / 之后

跳转传参:

跳转4种:

  • <router-link to="/news/参数">news</router-link>

  • <router-link :to="{name:"news",params:{id:参数}}">news</router-link>

  • this.$router.push("/news/参数")

  • this.$router.push({name:"news",params:{id:参数}})//必须用name跳路由 "id"处与注册路由时声明的变量名一致

接收1种:

  • this.$route.params

在created之后的所有地方 接受获取数据,如果没有传参 这个值就没有

三、路由嵌套

一个路由对象的设计中中包含:

  • path(路由匹配的路径)  
  • name(路由的名字,方便直接通过名字来匹配路由)
  • component(匹配路径时对应渲染的组件)  
  • redirect(匹配路径时重新匹配另外的路径)  
  • children(子路由们的数组)  

eg:

routes=[{path,name,component,redirect,children},{path,component,redirect,children,name}]

父路由中,一定要写 “<router-view></router-view>”才会加载子路由

子路由注册:

(1)path带“/”: 从父路由路径开始写到子路由路径  相当于绝对路径

(2)path不带“/”:直接写子路由路径  相当于相对路径

(3)星号路由/*:匹配所有  一般放在最下面 网址匹配错误(未注册的网址)时到指定路由路径

(4)重定向路由redirect:匹配路径时重新匹配另外的路径

{
    path: '/father',
    name: 'father',
    component: ()=>import("../views/father/child.vue"),
	children:[
        //直接写子路由路径  相当于相对路径
		{path:"child1",name:"child1",component:()=>import("../views/father/child1.vue")},
	    {path:"child2",name:"child2",component:()=>import("../views/father/child2.vue")},
        //从父路由路径开始写到子路由路径  相当于绝对路径
        {path:"/father/child3",name:"child3",component:()=>import("../views/father/child3.vue")},
		//星号路由:匹配所有 以上路由匹配不到就直接到父路由的第一个子路由界面
        {path:"/*",component:()=>import("../views/father/child1.vue")}
	],
     //用户输入的是/father父路由 帮他重定向到/father/child1 即自动跳转到第一个子路由界面
     redirect:"/father/child1",
  },

四、补充

this.$router.push({path:"/home"}) :向 history 添加新的历史记录
this.$router.replace({path:"/home"}):与push相似,但不会向 history 添加新记录,而是替换当前的history记录

this.$router.go(1):在浏览器记录中前进一步,等同于 history.forward()
this.$router.go(-1):后退一步记录,等同于 history.back()
this.$router.go(3):前进 3 步记录
this.$router.go(-100):如果 history 记录不够用,就失败

五、路由模式:

(1)history: 需要后端配合

history模式:

history采用HTML5的新特性;

提供了两个新方法:pushState(),replaceState()可以对浏览器历史记录栈进行修改,以及popState事件的监听到状态变更。

history 模式下,前端的 URL 必须和实际向后端发起请求的 URL 一致

底层切换组件的方式是使用H5的window.history的技术,当地址栏的history状态发生变化时,切换了router-view渲染的组件 来“欺骗”用户 达到切换新网页的效果

打包--托管静态页面--修改egg-static里面的prefix为/ --后端写个*路由匹配所有错的网址--返回给前端一个静态文件(SPA)--前端接收到就加载vue项目的js代码--跑路由代码根据网址判断显示组件

单页应用:SPA 整个网址只有一个页面(一个html文件)

(2)hash模式: #后都是hash值  无需后端配合 

hash模式:

在浏览器中符号“#”,#以及#后面的字符称之为hash,用window.location.hash读取

特点:hash虽然在URL中,但不被包括在HTTP请求中

用来指导浏览器动作,对服务端安全无用,hash不会重加载页面。

hash 模式下,仅 hash 符号之前的内容会被包含在请求中

底层切换组件的方式是使用老技术hash值,当地址栏的hash状态发生变化时,切换了router-view渲染的组件 来“欺骗”用户 达到切换新网页的效果,hash值不会发送给后端,所以无需后端配合 。

(3)抽象模式:自己了解

六、VueRouter router route的区别:

  • VueRouter是一个nodejs识别的模块包
  • route是路由匹配时,携带了一些信息的对象,包括path,params,hash,query等等信息
  • router是路由实例对象,包含了路由的跳转方法,钩子函数等等
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Vue Router 是 Vue.js 官方的路由管理器。它和 Vue.js 的核心深度集成,可以非常方便的实现单页面应用程序的路由功能。 Vue Router 提供了以下两种方式实现页面路由跳转: 1. 声明式导航:通过 `<router-link>` 组件实现页面跳转,该组件会被渲染成一个 `<a>` 标签,点击该标签后会触发路由跳转。 2. 编程式导航:通过 `$router` 对象提供的方法实现页面跳转,例如 `$router.push()`、`$router.replace()`、`$router.go()` 等方法。 下面我们来看一个简单的示例,在 Vue Router 中如何实现页面路由跳转: ```html <!-- 在模板中使用 router-link 组件 --> <router-link to="/home">Home</router-link> <!-- 在组件中使用 $router 对象实现编程式导航 --> <button @click="$router.push('/about')">About</button> ``` 在上面的示例中,我们分别演示了如何使用 `<router-link>` 组件和 `$router` 对象实现页面路由跳转,其中 `to` 属性表示跳转的目标路由地址。 此外,Vue Router 还支持路由嵌套的功能,可以通过嵌套路由的方式实现页面的嵌套展示。下面我们来看一个嵌套路由的示例: ```javascript const router = new VueRouter({ routes: [ { path: '/home', component: Home, children: [ { path: 'news', component: News }, { path: 'videos', component: Videos } ] } ] }) ``` 在上面的示例中,我们定义了一个名为 `Home` 的路由组件,并在该组件中嵌套了两个子路由 `News` 和 `Videos`,这样就可以实现在 `Home` 组件中展示新闻和视频内容的功能。在实际开发中,我们可以根据实际需求来定义不同的路由组件和子路由,实现灵活的页面嵌套效果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

哈哈ha~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值