首页 > 其他分享 >【VUE声明式导航跳转如何传参】router-link查询参数传参&动态路由传参

【VUE声明式导航跳转如何传参】router-link查询参数传参&动态路由传参

时间:2024-08-25 22:53:01浏览次数:10  
标签:传参 VUE color 搜索 首页 background 跳转 margin

VUE声明式导航跳转如何传参

文章目录

前言

提示:这里的跳转如何传参? 指 一个页面向另一个地址页面跳转时,如何传值?

比如下面的使用场景,热搜榜,是很常见的使用场景之一。
在这里插入图片描述
以上场景非常常见,如果还是不明白,可以这样理解:
(1)点击【首页】中的“细水长流者的博客”
(2)对【搜索页】进行传值(因为搜索页需要知道点击的是哪个链接);
(3)【搜索页】接收参数值,进行前端渲染。

简单理解:首页向搜索页传值,搜索页接收首页传过来的参数值!!!。

接下来,本文主要介绍router-link的两种跳转传参方式——查询参数传参动态路由传参

提示:router-link就是声明式导航,一个意思!!!


一、查询参数传参

语法

① 语法格式如下(to是router-link标签中的属性,类似a标签的href属性,本质上就是a标签):

  • to="/path?参数名=值"

②对应页面组件接收传递过来的值:

  • $route.query.参数名

实现步骤

1.实现【首页】和【搜索页】的基础点击功能

注意:此时并不涉及传参,只是实现首页和搜索页的正常点击功能

在这里插入图片描述

上述代码可在下面的图中显示出来,设置了【首页】的目标地址为/home,所以点击【首页】之后,地址栏会变成http://localhost:8080/#/home(原本是http://localhost:8080/#,即配置了路由之后的原始地址);点击【搜索】是一个道理。

在这里插入图片描述
在这里插入图片描述

2.实现【首页】向【搜索页】跳转时的传参功能

(1) 【首页】中注意to属性的写法,在第一步骤的基础上加上?key=细水长流者的博客
(2) 【搜索】中注意取key值的语法,使用{{$route.query.key}}

在这里插入图片描述

运行项目,可看到下面的运行效果:

在这里插入图片描述
在这里插入图片描述

其他热门搜索链接也是如此,效果如下:

在这里插入图片描述
传值结束!!!

JS中如何获取传值

这个步骤只是为了后续JS取值需要,因为在html结构中是不需要写this的,但是JS中需要加上this.

代码如下:

在这里插入图片描述

F12查看网页源代码,查看控制台的输出,可以看出,能够成功拿到参数值。

在这里插入图片描述

二、动态路由传参

语法

实现步骤

1.实现首页和搜索页的基础功能

该步骤如果会了可忽略,与上面查询参数传参方法一毛一样!!!

2.配置动态路由

注意这个words,后续接收传值是需要的

3.【首页】配置导航链接

为传参做准备,参数就是标记部分

在这里插入图片描述

4.【搜索页】接收传值

最终实现的效果如下所示:

在这里插入图片描述

JS中如何获取传值

查询参数传参章节


总结

需求:首页向搜索页传值,搜索页接收首页传过来的参数值!!!。

做法:查询参数传参&动态路由传参。

接下来分享【动态路由传参】代码:(查询参数传参被我注释,解开即可)

项目结构如下所示:

main.js代码:

import Vue from 'vue'
import App from './App.vue'
import router from './router/index'

Vue.config.productionTip = false

new Vue({
  render: h => h(App),
  router
}).$mount('#app')

router文件夹下的index.js代码:

// 路由的步骤
// 1.下载v3.6.5  
// 2.引入
// 3.安装注册Vue.use
// 4.创建路由对象
// 5.注入到new Vue中,建立关联
import Vue from 'vue'
import VueRouter from 'vue-router'
import Home from '@/views/home.vue'
import Search from '@/views/search.vue'
Vue.use(VueRouter)

const router =new VueRouter({
  routes:[
    {path:'/home',component:Home},
    // {path:'/search',component:Search},
    //第一步:配置动态录路由
    {path:'/search/:words',component:Search},
  ]
})

export default router

app.vue代码:

<template>
  <div id="app">
    <div class="footer_wrap">
      <router-link to="/home">首页</router-link>
      <router-link to="/search">搜索</router-link>
    </div>
    <br />
    <div class="top">
      <!-- VueRouter内置好的,自动展现需要展示的组件页面,
       比如点击发现音乐的超链接,前端展示Find.vue的页面内容 -->
      <router-view></router-view>
    </div>
  </div>
</template>

<script>
// import HelloWorld from './components/HelloWorld.vue'

export default {
  name: "App",
  components: {
    // HelloWorld
  },
};
</script>

<style scoped>
#app {
  font-family: Avenir, Helvetica, Arial, sans-serif;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  text-align: center;
  color: #2c3e50;
  margin-top: 60px;
}
.footer_wrap {
  background-color: #333;
  color: #fff; /* 白色字体 */
  text-align: center; /* 中心对齐 */
  padding: 20px; /* 上下内边距 */
  position: relative; /* 允许绝对定位的子元素 */
}

.footer_wrap a {
  color: #fff; /* 链接的颜色 */
  text-decoration: none; /* 去掉下划线 */
  margin: 0 15px; /* 左右外边距 */
  font-size: 16px; /* 字体大小 */
  transition: color 0.3s;
  padding: 20px 30px;
}

.footer_wrap a:hover {
  color: #ff9800; /* 悬停时变色 */
}

/* 响应式设计 */
@media (max-width: 600px) {
  .footer_wrap {
    padding: 10px; /* 缩小内边距 */
  }

  .footer_wrap a {
    font-size: 14px; /* 缩小字体 */
    margin: 0 10px; /* 缩小外边距 */
  }
}
.footer_wrap a.router-link-active {
  background-color: #007bff;
}
</style>

views文件夹下的home.vue代码:

<template>
  <div class="home">
    <div class="search">
      <input type="text" />
      <button>搜索一下</button>
    </div>
    热门搜索:
    <div class="hot-link">
      <!-- <router-link to="/search?key=细水长流者的博客"
        >细水长流者的博客</router-link
      >
      <router-link to="/search?key=如何成为博客大牛"
        >如何成为博客大牛</router-link
      >
      <router-link to="/search?key=前端开发工程师必备知识"
        >前端开发工程师必备知识</router-link
      > -->
      <router-link to="/search/细水长流者的博客">细水长流者的博客</router-link>
      <router-link to="/search/如何成为博客大牛">如何成为博客大牛</router-link>
      <router-link to="/search/前端开发工程师必备知识"
        >前端开发工程师必备知识</router-link
      >
    </div>
  </div>
</template>
  
  <script>
export default {
  name: "FindMusic",
};
</script>
  
<style>
body {
  font-family: Arial, sans-serif;
  background-color: #f4f4f4;
  margin: 0;
  padding: 20px;
}

.home {
  max-width: 600px;
  margin: 0 auto;
  background: #fff;
  border-radius: 8px;
  box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);
  padding: 20px;
}

.search {
  display: flex;
  justify-content: space-between;
  margin-bottom: 20px;
}

.search input[type="text"] {
  flex: 1;
  padding: 10px;
  border: 1px solid #ccc;
  border-radius: 4px;
  outline: none;
  transition: border-color 0.3s;
}

.search input[type="text"]:focus {
  border-color: #007bff;
}

.search button {
  padding: 10px 15px;
  background-color: #007bff;
  color: white;
  border: none;
  border-radius: 4px;
  cursor: pointer;
  transition: background-color 0.3s;
  margin-left: 10px;
}

.search button:hover {
  background-color: #0056b3;
}

.hot-link {
  margin-top: 20px;
}

.hot-link a {
  display: inline-block;
  margin-right: 10px;
  text-decoration: none;
  color: #007bff;
  padding: 5px 10px;
  border-radius: 4px;
  transition: background-color 0.3s, color 0.3s;
}

.hot-link a:hover {
  background-color: #007bff;
  color: white;
}
</style>



views文件夹下的search.js代码:

<template>
  <div class="search-box">
    <div class="keyword">
      <label for="">搜索关键字:</label>
      <!-- {{ $route.query.key }} -->
      {{ $route.params.words }}
    </div>
    <div class="result">
      <p>(1).........................</p>
      <p>(2).........................</p>
      <p>(3).........................</p>
      <p>(4).........................</p>
      <p>(5).........................</p>
      <p>(6).........................</p>
    </div>
  </div>
</template>

<script>
export default {
  name: "MyFriend",
  created() {
    console.log(this.$route.params.words);
  },
};
</script>

<style>
body {
  font-family: Arial, sans-serif; /* 使用一种清晰的字体 */
  background-color: #f5f5f5; /* 设置一个柔和的背景色 */
  margin: 0; /* 去除默认的外边距 */
  padding: 20px; /* 添加内边距 */
}

.search-box {
  background-color: #ffffff; /* 搜索框背景色 */
  border-radius: 5px; /* 圆角边框 */
  box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1); /* 添加阴影效果 */
  padding: 20px; /* 搜索框内边距 */
  max-width: 600px; /* 最大宽度 */
  margin: auto; /* 居中 */
}

.keyword {
  font-size: 18px; /* 设置关键字部分的字体大小 */
  margin-bottom: 15px; /* 下面的间距 */
  color: #333; /* 设置文本颜色 */
}

.result p {
  background-color: #f9f9f9; /* 每个结果的背景色 */
  border-left: 4px solid #007bff; /* 左边的颜色条 */
  padding: 10px; /* 内边距 */
  margin: 8px 0; /* 上下外边距 */
  border-radius: 4px; /* 圆角效果 */
  color: #555; /* 文本颜色 */
}

.result p:hover {
  background-color: #e6f4ff; /* 悬停时的背景色 */
  transition: background-color 0.3s ease; /* 动画效果 */
}
</style>

标签:传参,VUE,color,搜索,首页,background,跳转,margin
From: https://blog.csdn.net/qiaoermeng/article/details/141535521

相关文章

  • 第8篇 vue开发环境搭建
    window系统上部署vue的开发环境1.安装nodejs1.1下载并安装node.js在浏览器中打开nodejs官网https://nodejs.org/zh-cn/,选择需要的版本直接点击即可下载,可以选择长期支持的版本【自由选择】然后就是一系列的“下一步”2.检查nodejs是否安装成功打开cmd,输入命令n......
  • 基于java+springboot+vue的刷题系统微信小程序
    ......
  • Chapter 03 Vue指令(下)
    欢迎大家订阅【Vue2+Vue3】入门到实践专栏,开启你的Vue学习之旅!文章目录前言一、v-on指令二、v-for指令三、v-bind指令四、v-model指令前言在Vue.js中,指令是带有v-前缀的特殊属性,不同属性对应不同的功能。通过学习不同的指令,我们能够灵活应对多种业务场景......
  • 基于springboot+vue.js的牙科就诊管理系统附带文章源码部署视频讲解等
    文章目录前言详细视频演示具体实现截图核心技术介绍后端框架SpringBoot前端框架Vue持久层框架MyBaits为什么选择我代码参考数据库参考测试用例参考源码获取前言......
  • 基于ssm+vue.js的附学费管理系统带文章源码部署视频讲解等
    文章目录前言详细视频演示具体实现截图核心技术介绍后端框架SSM前端框架Vue持久层框架MyBaits为什么选择我代码参考数据库参考测试用例参考源码获取前言......
  • [Vue] useVModel
    Onewaydatabinding,theparentcomponentpasingdatathrough v-modeltochildcomponent,ifchildmodifythedata, v-modelwilltakecareemitthechangedbacktoparentcomponent.Thisparttenworksfine.Buttheremightbesomeproblem,forexample,wha......
  • 基于Springboot+Vue的铁路订票管理系统(含源码数据库)
    1.开发环境开发系统:Windows10/11架构模式:MVC/前后端分离JDK版本:JavaJDK1.8开发工具:IDEA数据库版本:mysql5.7或8.0数据库可视化工具:navicat服务器:SpringBoot自带apachetomcat主要技术:Java,Springboot,mybatis,mysql,vue2.视频演示地址3.功能这个系......
  • Vue3项目开发——新闻发布管理系统(三)
    文章目录七、登录&注册页面设计开发1、安装、导入`ElementPlus`组件库1.1安装1.2引用1.3设置中文1.4使用七、登录&注册页面设计开发网页页面设计肯定离不开表单、输入框、按钮等等控件的布局、样式等等的设计。在新闻发布管理系统中,使用ElementPlus......
  • idea控制vue项目启动(前后端分离中的前端)(自用
    EditControl…… npm 选中vue的package.json(后端注意设置端口为8080之外的) scripts选serve 启动时不要使用debug模式 ......
  • [vue3] vue3 setup函数
    从语法上看,CompositionAPI提供了一个setup启动函数作为逻辑组织的入口,提供了响应式API,提供了生命周期函数以及依赖注入的接口,通过调用函数来声明一个组件。OptionsAPI选项式API在props、data、methods、computed等选项中定义变量;在组件初始化阶段,Vue.js内部处理这......