【问题标题】:NUXT: Redirect with payloadNUXT:使用有效负载重定向
【发布时间】:2020-11-27 20:08:47
【问题描述】:

我正在尝试创建一个相当普通的东西,让我们认为它是一个博客。在客户端点击明信片会打开包含帖子内容的模式,并将查询 ?postID=123 添加到 URL。

当我们尝试访问my-site.com?postID=123 时,服务器中间件会检查是否有postID 查询参数,并使用301 重定向将我们重定向到my-site.com/category/subcategory/123。该中间件可能如下所示:

export default async function ({ route, redirect, api }) {
  const postID = route.query.postID;
  if (!postID) return;

  const post = await api.get('postID')

  redirect(301, `/${post.category}/${post.subcategory}/${postID}`);
}

它有效,但要建立与类别和子类别的链接,我已经得到了我的帖子。在_post 页面上,我们被重定向到我必须再次在asyncData()fetch() 中获取我的帖子。

我可以在nuxtServerInit 操作中将帖子发布到商店,但我认为这有点 hack。

所以问题是:有没有办法在重定向期间将一些数据传递给页面组件?

【问题讨论】:

  • 如果我做得好,你可以在 nuxt 中做一个中间件来捕获所有重定向,然后你可以在那里传递数据或查询参数
  • @DarioRega 我应该如何通过“重定向”功能将数据传递给页面组件?
  • 你能告诉我更多关于你想要传递的数据吗?写一个例子,我尝试根据你的代码调整我的答案
  • @elijah-ellanski 我已经使用重定向实现了类似的任务。你成功解决问题了吗?如果有,具体是怎样的?

标签: vue.js nuxt.js vue-router


【解决方案1】:

我相信是的,你可以做到。但是你需要知道一些事情。 如果你有一个命名路线,那就更简单了。只需执行以下操作:

    // pass params to named route
    this.$router.push ({name: 'user', params: {userId: '123'}})
    
    // get params from named route in other component
    console.log(this.$router.params)

但是,如果您没有创建命名路线,您可以做一些不太优雅的事情,但它会起作用...

看看这个链接https://router.vuejs.org/guide/essentials/navigation.html上的vue文档会很有趣。这里有很多信息可以更好地解释这一点。

但是让我们来看示例,假设您使用 router.push,并且您了解可以在替换发生后执行函数,假设您可以执行以下操作:

this.$router.push(
{
  path: 'YOUR/PATH',
},
// onComplete Function
(myValue) => {

    // save the value in localStorage
  localStorage.setItem('VALUE', JSON.stringify(myValue))

  // to retrieve the value you can get with
  console.log(JSON.parse(localStorage.getItem('VALUE')))

  // save the value in store with vuex
  this.$store.dispatch('doSomethingFromAction', myValue)
  this.$store.commit('doSomethingFromMutation', myValue)

  // to retrieve the value you can get with
  console.log(this.$store.state.myValue)
})

如果您不了解 vuex,请查看文档:https://vuex.vuejs.org/

【讨论】:

  • 我需要将数据传递给服务器端的页面组件,localStorage 不是一个选项
  • 因此,您可以在 nuxt.config.js 中创建一个特定的路由器名称,您需要配置路由器属性以将某些值作为查询或参数传递。我的答案中的第一个选项是这个。看看 vue 文档router.vuejs.org/guide/essentials/navigation.html 这里你会得到你需要的。
  • 我们的想法是不要弄乱 URL。只是传递数据作为重定向函数的第三个参数将其编码为查询字符串,这是正确的
  • 抱歉,您要找的东西暂时不存在
猜你喜欢
  • 2018-12-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-11
  • 2013-12-25
  • 1970-01-01
  • 1970-01-01
  • 2011-10-04
相关资源
最近更新 更多