VUE—跳转传参

news2024/11/15 23:19:54

目录

一、基本使用

二、$route和$router

三、路由跳转的两种方式

四、编程式导航

五、传参

六、props

一、基本使用

1、安装vue-router

cnpm install --save vue-router@3

如果大家用的是vue2,下载vue-router不设置版本好的话,可能会因为版本过高,不兼容的问题导致项目报错,所以大家可以限制版本号

如果已经下载了最新的版本,可以先删除再下载

npm uninstall vue-router --legacy-peer-deps 

2、创建路由组件

一般来说vue的路由组件建在【pages或者views】文件夹下,非路由组件建在components文件夹下

所有我们要先创建一个文件夹,我这里取名pages,再创建两个文件夹about和detail

 

<template>
	<div>about</div>
</template>

<script>
    export default {
        name: "about",
        data() {
            return {};
        },
        created() {},
        mounted() {},
        methods: {},
    };
</script>

<style scoped lang="stylus"></style>

detail组件和about一样

3、根组件添加非路由组件

<template>
    <div>
        <router-link to="/about">关于</router-link>
        <router-link to="/detail" style="marginLeft:20px">详情</router-link>
        <router-view></router-view>
    </div>
</template>

<script>
    export default {
        name: 'app',
        data () {
            return {
            }
        },
        created () {
        },
        mounted () {
        },
        methods: {
        }
    }
</script>

<style scoped lang="stylus">

</style>

router-view的作用是指定展示位置

4、编写router配置项

需要新建一个router文件夹,和pages平级

 

// 配置路由
import Vue from "vue";
import VueRouter from "vue-router";

// 使用插件
Vue.use(VueRouter);

// 引入路由组件
import About from "@/pages/About";
import Detail from "@/pages/Detail";

// 配置路由
export default new VueRouter({
    // 配置路由
    routes: [
        {
            path: "/about",
            component: About,
        },
        {
            path: "/detail",
            component: Detail,
        },
    ],
});

5、在main.js文件中配置router

此时就可以得到一个路由跳转的基本使用

 

二、$route和$router

每个组件都有自己的$route属性,里面存储着自己的路由信息。

整个应用只有一个router,可以通过组件的$router属性获取到。

对于初学来说,最简单的记忆$route提供数据,$router提供方法,r就相当于lol里面英雄放大招,多的这个r就相当于我要调用方法了

我们可以打印一下this、this.$route、this.$router

1、this(当前实例)

 

2、this.$route(数据)

 

可以看到它的路径是什么,至于里面的传参(params和query)我们之后会讲到

3、this.$router(方法)

一般都是通过this.$router里面的方法进行跳转,后退,大家可以看到,所有的方法都在它的原型链上,所以如果需要重写当前某个方法,改的一定是原型链上的方法

三、路由跳转的两种方式

(1)声明式导航(router-link:务必要有to属性)

(2)编程式导航(push||replace)

从刚才的基本案例中可以看到声明式导航的使用,是一个较为方便的用法,如果只是单纯的跳转就可以使用到router-link

假设此时我们需要通过点击按钮进行跳转,这个方法就不是很合适了

1、创建组件

同about

<template>
    <div>
        search
    </div>
</template>

<script>
    export default {
        name: 'searchProject',
        data () {
            return {
            }
        },
        created () {
        },
        mounted () {
        },
        methods: {
        }
    }
</script>

<style scoped lang="stylus">

</style>

2、添加路由

在router配置项里面配置即可,一定要先引入路由组件再配置路由

// 配置路由
import Vue from "vue";
import VueRouter from "vue-router";

// 使用插件
Vue.use(VueRouter);

// 引入路由组件
import About from "@/pages/About";
import Detail from "@/pages/Detail";
import Search from "@/pages/Search";

// 配置路由
export default new VueRouter({
    // 配置路由
    routes: [
        {
            path: "/about",
            component: About,
        },
        {
            path: "/detail",
            component: Detail,
            meta: { show: false },
        },
        {
            path: "/search",
            component: Search,
            meta: { show: false },
        },
    ],
});

3、添加按钮

<template>
    <div>
        <router-link to="/about">关于</router-link>
        <router-link to="/detail" style="marginLeft: 20px">详情</router-link>
        <button @click="handleSearch" style="marginLeft: 20px">搜索</button>
        <router-view></router-view>
    </div>
</template>

<script>
    export default {
        name: "app",
        data() {
            return {};
        },
        created() {},
        mounted() {},
        methods: {
            handleSearch() {
                this.$router.push("/search");
            },
        },
    };
</script>

<style scoped lang="stylus"></style>

此时,我们就要使用this.$router.push()方法进行跳转

 

此时点击按钮就可以进行跳转

四、编程式导航

1、router-link的replace

浏览器的历史记录有两种写入方式:分别为pushreplacepush是追加历史记录,replace是替换当前记录。路由跳转时候默认为push

(1)push情况

这里是可以进行回退的

(2)replace情况

用法只需要在router-link里面添加replace

<router-link replace to="/about">关于</router-link>

 

此时是不能进行回退操作的

2、编程式导航

就更好理解了

一个是this.$router.push()

一个是this.$router.replace()

这里就不用过多演示

五、传参

1、query

1.1、router-link的方式

(1)字符串写法

<router-link replace to="/about?id=123">关于</router-link>

参数接收

<div>id是{{ $route.query.id }}</div>

这里就是上面提到的$route中的query属性,在里面取数据即可

(2)对象写法

<router-link
    replace
    :to="{
         path: '/about',
         query: {
         		id: 123,
         	},
         }"
    >关于
</router-link>

注意这里的冒号,加冒号表示是一个变量,不加冒号表示一个常量

结果和上面是一样的

1.2、编程式导航的方式

这里用push距离,replace同理

(1)字符串写法

this.$router.push("/search?num=" + 2);

获取方式相同

(2)对象写法

this.$router.push({
    path: "/search",
    query: { num: 2 },
});

结果和上面是一样的

2、params

首先需要在路径添加占位符,声明params参数

{
    path: "/detail/:name",
    component: Detail,
    meta: { show: false },
    name: "detail",
},

1.1、router-link的方式

(1)字符串写法

<router-link to="/detail/tom" style="marginLeft: 20px">详情</router-link>

参数接收

<div>id是{{ $route.params.name }}</div>

这里就是上面提到的$route中的params属性,在里面取数据即可

(2)对象写法

<router-link
    replace
    :to="{
         name: 'detail',
         params: {
         	name: tom,
         },
     }"
    >关于
</router-link>

特别注意:路由携带params参数时,若使用to的对象写法,则不能使用path配置项,必须使用name配置!

结果和上面是一样的

1.2、编程式导航的方式

{
    path: "/search/:num",
    component: Search,
    meta: { show: false },
    name: "search",
},

还是需要占位符和name

(1)字符串写法

this.$router.push("/search/" + 2);

 

(2)对象写法

this.$router.push({
    name: "search",
    params: { num: 2 },
});

3、query和params共用

最常用的方法:

this.$router.push({
    name: "search",
    params: { num: 2 },
    query: { data: "2333" },
});

六、props

作用:让路由组件更方便的收到参数

继续我们刚才的案例

1、布尔值写法

(1)路由

{
    path: "/search/:num?",
    component: Search,
    meta: { show: false },
    name: "search",
    //props值为布尔值,布尔值为true,则把路由收到的所有params参数通过props传给Detail组件
    props: true,
},

(2)组件

要注意解析props才能拿到值

<template>
    <div>
        <div>search</div>
        <div>propsNum:{{ num }}</div>
        <div>propsData:{{ data }}</div>
    </div>
</template>

<script>
    export default {
        name: "searchProject",
        props: ["num", "data"],
        data() {
            return {};
        },
        created() {},
        mounted() {},
        methods: {},
    };
</script>

<style scoped lang="stylus"></style>

这样做的话,我们在模板中就更方便拿到值,不用每次都写$route.parmas,但是要注意布尔值只能传递parmas的值

2、字符串写法

{
    path: "/search/:num?",
    component: Search,
    meta: { show: false },
    name: "search",
    //props值为对象,该对象中所有的key-value的组合最终都会通过props传给Detail组件
    props: { a: 1, b: 2 },
},

按照上面的方法解析即可

3、函数写法

{
    path: "/search/:num?",
    component: Search,
    meta: { show: false },
    name: "search",
    //props值为函数,该函数返回的对象中每一组key-value都会通过props传给Detail组件
    props(route) {
        return {
            num: route.params.num,
            data: route.query.data,
        };
    },
},

按照上面的方法解析即可

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/108169.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

大数据Kudu(十一):ClickHouse与Kudu对比

文章目录 ClickHouse与Kudu对比 ClickHouse与Kudu对比 kudu 2015年9月28号出现第一个测试版本0.5.0,2016年2月26第一个正式版0.7.发布。clickhouse 2018年3月开源正式版出现。两者都是列式存储,都可以针对数据进行实时OLAP分析,两者的区别如下: 方面 Kudu

零基础小白如何做到5个月学成Python?学习规划在这里!

自学半个月没用不是正常的吗&#xff1f;一般来说&#xff0c;Python培训需要脱产学习5个月左右&#xff0c;这样的市场既能掌握工作所需的技能&#xff0c;还能够积累一定的项目经验。 当然&#xff0c;如果你想要在Python的路上越走越远&#xff0c;则需要不断的积累和学习&…

实验二 单隐层神经网络

一、实验目的 &#xff08;1&#xff09;学习并掌握常见的机器学习方法&#xff1b; &#xff08;2&#xff09;能够结合所学的python知识实现机器学习算法&#xff1b; &#xff08;3&#xff09;能够用所学的机器学习算法解决实际问题。 二、实验内容与要求 &#xff08…

我们是如何构建自己的可观测性的

引言 近日&#xff0c;关于云平台自身的可靠性问题又成为大家关注的焦点。系统一定会有故障&#xff0c;相信作为用户都能理解&#xff0c;但用户需要在故障发生后&#xff0c;能尽快知晓造成故障的根本原因和修复计划&#xff0c;以便有效调整受影响的业务来降低损失&#xf…

盘点2022年电视行业:科技与美学的战场三星缔造“生活方式”的全新价值

作者 | 曾响铃 文 | 响铃说 前不久&#xff0c;中国质量协会第十一次组织开展了本年度电视行业用户满意度监测&#xff0c;监测对象为市场占有率达90%以上的10个主流电视品牌&#xff0c;结果显示2022年电视行业用户满意度为83分&#xff0c;同比持平&#xff0c;处于较高水平…

【Ctfer训练计划】——(三)

作者名&#xff1a;Demo不是emo 主页面链接&#xff1a;主页传送门 创作初心&#xff1a;舞台再大&#xff0c;你不上台&#xff0c;永远是观众&#xff0c;没人会关心你努不努力&#xff0c;摔的痛不痛&#xff0c;他们只会看你最后站在什么位置&#xff0c;然后羡慕或鄙夷座…

Linux系统安装Zookeeper教程

原文链接 在root账户下创建zookeeper安装目录&#xff1a; mkdir /home/zookeeper进入zookeeper目录&#xff1a; cd /home/zookeeper通过wget命令下载zookeeper安装包&#xff1a; wget https://mirrors.bfsu.edu.cn/apache/zookeeper/zookeeper-3.7.0/apache-zookeeper-3.7.0…

spring+jsp面向社区健康服务的医疗平台

目录 第一章 绪论 5 1.1 研究背景 5 1.2系统研究现状 5 1.3 系统实现的功能 6 1.4系统实现的特点 6 1.5 本文的组织结构 6 第二章开发技术与环境配置 7 2.1 Java语言简介 7 2.2JSP技术 8 2.3 MySQL环境配置 8 2.5 mysql数据库介绍 9 2.6 B/S架构 9 第三章系统分析与设计 11 3…

WebDAV之葫芦儿·派盘+FX文件管理器

FX文件管理器 支持WebDAV方式连接葫芦儿派盘。 想要一款几乎强大到极致的文件/媒体管理器,同时支持手机、电脑文件共享?推荐您选择FX File Explorer,您就可以快速轻松地管理您手机或平板上的所有内容。 FX File Explorer是一个多功能的手机文件流量和管理工具。它的界面美…

拆解一个居家隔离监测的无线门磁

捡到了一个居家隔离监测的无线门磁&#xff0c;拆开来看看&#xff1a; 门磁整体照&#xff1a; 一套门磁分两部分&#xff0c;一个主机&#xff0c;一个磁铁&#xff1b; 可以看到&#xff0c;使用的是两节干电池供电&#xff0c;内置弹簧天线。 拆下来PCBA&#xff0c;可…

(二十)Vue之单文件组件

文章目录基本使用一、如何定义一个组件&#xff1f;二、如何注册组件&#xff1f;三、如何使用组件&#xff1f;演示程序普通Vue程序单文件组件程序局部注册全局注册几个注意点1.关于组件名2.关于组件标签3.一个简写方式组件的嵌套使用关于VueComponent一个重要的内置关系&…

行业唯一,Eolink 入选信通院“云上软件工程社区汽车云工作组”首批企业成员名单

导读&#xff1a;本月20日&#xff0c;由中国信息通信研究院主办的汽车云专场沙龙成功召开&#xff0c;会上信通院发布了业内首个《汽车行业软件研发效能成熟度模型标准》&#xff0c;并成立了“云上软件工程社区-汽车云工作组”&#xff0c;Eolink 作为 API 管理领域唯一企业入…

下载离线地图多种方式(osm,MapTileDownloader )

目录 效果图&#xff1a; 一 下载离线地图的二种方式 1.osm 的方式下载瓦片 2、下载MapTileDownloader 二 代码&#xff08;推荐使用osm方式&#xff09; 效果图&#xff1a; 一 下载离线地图的二种方式 1.osm 的方式下载瓦片 百度网盘分享链接&#xff1a;https://pan.…

平板雷达水位计如何安装?平板雷达水位计怎么用?

1、设备介绍 本产品是一款用于地表水液位监测的非接触式平面雷达水位计&#xff0c;基于精确测量的电磁波测距技术。传感器发射电磁波照射水面并接收其回波&#xff0c;由此获得水面至电磁波发射点的距离、距离变化率&#xff08;径向速度&#xff09;、方位、高度等信息。  …

如何在Odoo 16库存中配置批次和序列号

如果您是库存管理操作的新手&#xff0c;您必须熟悉几种识别号&#xff0c;以跟踪和识别从制造到交付过程中的产品。批次和序列号是制造商通过各种产品移动来识别产品的部件。人们常常误解这些是一些随机分配的数字&#xff0c;以便得到产品的总数。但是&#xff0c;当涉及到库…

2022年第三届MathorCup高校数学建模挑战赛——大数据竞赛 赛道B 北京移动用户体验影响因素研究 问题二建模方案及代码实现详解

2022年第三届MathorCup高校数学建模挑战赛——大数据竞赛 赛道B 北京移动用户体验影响因素研究 建模方案及代码实现 更新进展 2022年12月21日 12:20 发布问题一、二思路及问题一的python代码实现 2022年12月22日 15:00 发布问题二python实现的代码 更新完毕 相关链接 &…

【观察】魔方安全:攻击面管理SaaS化创新,让企业在攻防实战中化被动为主动...

近年来&#xff0c;随着网络安全形势的愈加严峻&#xff0c;行业对实战型攻防技术的认知也有了快速的提升。在此背景下&#xff0c;偏向于主动防御且更注重实战对抗的攻击面管理&#xff08;Attack Surface Management&#xff0c;简称“ASM”&#xff09;理念以及相关技术&…

使用 ABAP 代码给 OData 元数据增添注解的一些例子

最近有读者向我咨询&#xff0c;关于当系统在 SAP NetWeaver 740 之上运行时&#xff0c;如何向 OData 服务添加注解(annotation)。 虽然使用 SAP NetWeaver 750 及更高版本&#xff0c;可以在 CDS DDL 源代码中添加注解&#xff0c;然而 SAP NetWeaver 740 没有此类支持。 尽…

基于神经网络的宏观经济数据分析研究(Matlab代码实现)

&#x1f468;‍&#x1f393;个人主页&#xff1a;研学社的博客 &#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜…

redis介绍及使用部署

一、redis介绍 1、redis特点&#xff1a; 开源的&#xff08;BSD协议&#xff09;&#xff0c;使用ANSI C 编写&#xff0c;基于内存的且支持持久化&#xff0c;高性能的Key-Value的NoSQL数据库单线程运行&#xff0c;省去了线程上下文切换带来的性能开销&#xff0c;效率更高…