首页 前端知识 vue之router-link页面跳转及传参

vue之router-link页面跳转及传参

2024-06-03 12:06:32 前端知识 前端哥 507 873 我要收藏

文章目录

  • vue之router-link页面跳转及传参
    • 根据路由的路径跳转及传参(query)
    • 根据路由的名称跳转及传参(params)
    • 根据store传参

vue之router-link页面跳转及传参

<router-link> 是用于在 Vue.js 应用程序中进行路由导航的组件。它可以用来生成具有正确链接的<a> 标签,让用户点击后能够导航到其他页面。

要在使用 <router-link> 进行页面跳转时传递参数,你可以使用 to 属性和路由对象的 queryparams 属性来实现。下面是一些示例代码:

根据路由的路径跳转及传参(query)

路由路径

{
    path: '/destination',	//路由路径
    component: () => import('@/views/destination'), //页面位置
    hidden: true	//默认隐藏
}

传递参数

<template>
  <div>
    <!-- 在 to 属性中使用对象形式传递参数 -->
    <router-link :to="{ path: '/destination', query: { id: 123, name: 'example' } }">
      Go to Destination
    </router-link>
  </div>
</template>

上面的示例中,/destination 是目标路由的路径,query 属性被用来传递参数。点击链接后,URL 将类似于 /destination?id=123&name=example。

接收参数

<template>
  <div>
    <p>ID: {{ $route.query.id }}</p>
    <p>Name: {{ $route.query.name }}</p>
  </div>
</template>

<script>
export default {
  mounted() {
    console.log(this.$route.query.id); // 访问 query 中的参数
    console.log(this.$route.query.name);
  }
};
</script>

根据路由的名称跳转及传参(params)

路由路径

{
    path: '/destination',	//路由路径
    name: 'destination',	//路由名称
    component: () => import('@/views/destination'), //页面位置
    hidden: true	//默认隐藏
}

传递参数

<template>
  <div>
    <!-- 在 to 属性中使用对象形式传递参数 -->
    <router-link :to="{ name: 'destination', params: { id: 123, name: 'example' } }">
      Go to Destination
    </router-link>
  </div>
</template>

这个示例中,使用了路由的名称 destination,并通过 params 属性传递了参数。注意,这种方式需要在路由配置中定义了对应名称的路由,并且参数会被作为 URL 的一部分,如 /destination/123/example。

接收参数

<template>
  <div>
    <p>ID: {{ $route.params.id }}</p>
    <p>Name: {{ $route.params.name }}</p>
  </div>
</template>

<script>
export default {
  mounted() {
    console.log(this.$route.params.id); // 访问 params 中的参数
    console.log(this.$route.params.name);
  }
};
</script>

根据store传参

根据store传参就是页面跳转的时候将参数放入store中
在vue中,store用于管理状态共享数据以及在各个组件之间管理外部状态,store是vuex应用的核心,也就是一个容器,包含着应用中大部分的状态,更改store中的状态唯一方法是提交mutation。关于具体使用方法可参考若依前后端分离中的前端代码(照葫芦画瓢)。

若依前后端分离:https://gitee.com/y_project/RuoYi-Vue
在这里插入图片描述
路由路径

{
    path: '/destination',	//路由路径
    component: () => import('@/views/destination'), //页面位置
    hidden: true	//默认隐藏
}

传递参数

<template>
  <div>
    <!-- 在 to 属性中使用路由路径跳转 -->
    <router-link :to="'/destination'">
      <span @click="setDestinationParams">Go to Destination</span>
    </router-link>
  </div>
</template>

<script>
export default {
  methods: { 
    setDestinationParams() {
      var params = { id: 123, name: 'example' }
      this.$store.dispatch("destination/setDestination", params);
    },
  }
};
</script>

参数放入store中
编写destination.js放在src/store/modules中

const state = {
  params: {}
}
const mutations = {
  //放入参数
  SET_DESTINATION: (state, params) => {
      state.params=params
  },
  //清楚参数中的某个属性值
  REMOVE_DESTINATION: (state, key) => {
    delete state.params[key];
  },
  //清除参数
  CLEAN_DESTINATION: (state) => {
    state.params = {}
  }
}
//调用方法
const actions = {
  // 设置临时数据
  setDestination({ commit }, data) {
    commit('SET_DESTINATION', data)
  },
  // 删除临时数据的属性
  removeDestination({ commit }, key) {
    commit('REMOVE_DESTINATION', key)
  },
  // 清空临时数据
  cleanDestination({ commit }) {
    commit('CLEAN_DESTINATION')
  }
}

export default {
  namespaced: true,
  state,
  mutations,
  actions
}

为了方便调用,将参数引入getters.js

const getters = {
  ......
  destination: state => state.destination.params,
  ......
}
export default getters

将getters.js放入index.js

import Vue from 'vue'
import Vuex from 'vuex'
import getters from './getters'
import destination from './modules/destination'

Vue.use(Vuex)

const store = new Vuex.Store({
  modules: {
    destination
  },
  getters
})

export default store

接收参数

<template>
  <div>
    <p>ID: {{ id }}</p>
    <p>Name: {{ name }}</p>
  </div>
</template>

<script>
export default {
  data() {
  	return {
		id:null,
		name:"",
    }
  },
  mounted() {
    console.log(this.$store.getters.destination.id); 
    console.log(this.$store.getters.destination.name);
    this.id=this.$store.getters.destination.id;
    this.name=this.$store.getters.destination.name;
  },

  //离开此页面时触发(刷新页面或者进入其他页面,若是不想清除,注释此方法即可)
  beforeRouteLeave(to, from, next) {
    //页面切换时清除临时跳转参数
    this.$store.dispatch("destination/cleanDestination");
    next();

    // 这里需要elementui的支持,如果使用其他界面组件自行替换即可
    // this.$confirm("正在离开本页面,本页面内所有未保存数据都会丢失", "警告", {
    //   confirmButtonText: "确定",
    //   cancelButtonText: "取消",
    //   type: "warning",
    // })
    //   .then(() => {
    //     // 正常跳转
    //     next();
    //   })
    //   .catch(() => {
    //     // 如果取消跳转地址栏会变化,这时保持地址栏不变
    //     window.history.go(1);
    //   });
  },
};
</script>
转载请注明出处或者链接地址:https://www.qianduange.cn//article/10650.html
标签
评论
发布的文章

vue学习计划

2024-06-08 18:06:08

fastjson1.2.24-RCE漏洞复现

2024-06-08 09:06:33

JsonPath用法详解

2024-06-08 09:06:55

大家推荐的文章
会员中心 联系我 留言建议 回顶部
复制成功!