vue学习day6

页面跳转

页面跳转有两种方法:通过标签跳转,通过api跳转

基本写法

该写法仅仅用来跳转页面,不能用来传递数据

//to="/path"
<router-link to="/b">跳转到B</router-link>
//a标签可也用于页面跳转,但是它只能用于第三方页面的跳转,如下写法,可以跳转到百度首页
<a href="http://www.baidu.com">a标签跳转百度</a>
//但是,router-link不可用于第三方页面跳转,它用于vue页面之间的跳转。如下写法把http://www.baidu.com拼接到url后面,并没有跳转到百度首页,如下图
<router-link to="http://www.baidu.com">百度一下</router-link>

在这里插入图片描述

第二种写法 :to=“{}”

  • 使用path跳转
<router-link :to="{path : '/b'}">B页面{path : "/b"}</router-link>
  • 命名路由跳转
    在routes.js文件种给路由命名
{
      path : "/b",
      name :"B",  //命名路由
      component : () => import('@/views/B.vue'),
    },

在.vue文件中通过路由名跳转

<router-link :to="{name : 'B'}">B页面{ name : 'B'}</router-link>

页面跳转并且传递参数

使用query传递数据

query和path联用

<router-link 
        :to="{
            path : '/b',
            query : {
                id : 'x001',
                name : '手机',
                price : 123,
                type : {
                    brand : '华为',
                    prices : [100,200,3090,120]
                }
            }
        }"
        >B页面传递 query数据</router-link>

params传递数据

params和命名路由联用

<router-link
       :to="{
           name : 'B',
           params : {
               id : 's003',
               name : '电饭锅',
               price : 888,
                type : {
                    brand : '华为',
                    prices : [100,200,3090,120]
                }
           }
       }"
       >B页面传递 param数据</router-link>

query传参和params传参的区别

  • 安全性不同
    • query传参,传递的数据将拼接大屏url后, 在浏览器中数据是可见的;
    • params传参,数据传递不可见
  • 配合路由不一样
    • query与 path:"/route"配合
    • params 与 name : “route名称”
  • 传递的数据类型限制不一样
    • query:一般只用来传递普通的key=value,其值一般是number,Stirng,boolean。如果传递数据是数组或者对象,会出现两个问题:
      1.对象和数组会被进行字符串转码,转成[object object]拼接在url后面;
      2.如果传递的数据过多,拼接在url后面的字符串长度会很长,但是浏览器的url栏字符长度是有限的,过长会导致数据丢失

    • params:传递数据没有限制

  • 跳转到目标页后,页面刷新 query数据不会丢失,但是params数据会丢失。
    因为query跳转是把加载到页面栈中的页面调用;而params跳转则是把加载到页面栈中的页面替换掉,页面栈就是没有跳转之前的页面了,刷新之后数据进行重新请求,请求不到数据,因为之前的页面已经被目标页面替换了。
  • 目标页面接收数据的方式不同
    • query:
      视图中: r o u t e . q u e r y . k e y 1 接 收 显 示 。 J S 中 t h i s . route.query.key1 接收显示。JS中 this. route.query.key1JSthis.route.query.key1
      B.vue页面中这样接收:
<h3>接收query参数</h3>
       <h1>产品ID{{ $route.query.id }}</h1>
       <h1>产品名称:{{ $route.query.name }}</h1>
       <h1>产品价格: {{ $route.query.price }}</h1>
  • params :
    视图中: r o u t e . p a r a m s . k e y 2 接 收 显 示 。 J S 中 t h i s . route.params.key2 接收显示。JS中 this. route.params.key2JSthis.route.query.key2
    B.vue页面中这样接收:
<h3>接收param参数</h3>
       <h1>产品ID{{ $route.params.id }}</h1>
       <h1>产品名称:{{ $route.params.name }}</h1>
       <h1>产品价格: {{ $route.params.price }}</h1>
       <h1>其他对象数据:
            <h3 v-for="(item,key) in $route.params.type" :key="key">
                  {{ item }}
            </h3>
       </h1>

三种标签跳转的方式场景总结

        1、如果只单纯跳转,不传递参数 to="/path"
        2、如果需要传递普通的key=value,且刷新时保证数据页面
          数据存在 :to="{path:'/path', query:{}}"
        3、如果传递对象等复杂数据,或者传递数据量非常多
          用:to="{name : 'routename', params: {}}"

编程式导航

通过this.$router.push()记录页面栈的跳转
通过this.$router.replace()直接替换当前页面栈
通过this.$router.back()返回上级页面栈
.vue文件中

<template>
  <div>
		<el-button @click.native="go">编程式导航 B</el-button>
        <el-button @click.native="go1">编程式导航 B query传参</el-button>
        <el-button @click.native="go2">编程式导航 B params传参</el-button>
        <el-button @click.native="go3">编程式导航 B replace跳转</el-button>


</div>
</template>

<script>
export default {
methods : {
        go(){ // this.$router.push('/path')
            //直接调转
            this.$router.push('/b');
        },
        go1(){
            this.$router.push({
                path : "/b",
                query : {
                    id : "x0032",
                    name : "编程导航query传参",
                    price : "200"
                }
            })
        },
         go2(){
            this.$router.push({
                name : "B",
                params : {
                    id : "S0032",
                    name : "编程导航params传参",
                    price : "100"
                }
            })
        },
        go3(){
            // 直接替换A的页面栈记录
            this.$router.replace('/b');
        }
    }
}
</script>

<style>

</style>

$route 和 $router的区别
$route 是配置路由对象的,用来记录每个路由配置的信息,主要用于接收路由跳转传递的数据。

$router 是使用vue-router常见的理由对象,router里面有很多API方法和属性,用于实现路由的跳转和传参。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值