javascript - 推送路线时将对象作为 Prop 传递

标签 javascript vue.js

此函数位于路由器 View 之外的组件中。

goToMarkets(){
      this.$router.push({path: '/markets', params: {stock: this.model}})
    }

但是“市场”组件中的 Prop 未定义

路由器:

const routes = [
  {
    path: '/markets',
    name: 'Markets',
    component: Markets,
    props: true
  },]

市场组件:

props: {
    stock: Object
  },

即使在它被传递之前(在第一个函数中),该 prop 在 Markets 组件中是未定义的。

最佳答案

这里发生了几件事。

首先,路由参数构成 URL 的一部分,并在路由定义中预先定义。

给定路由定义:

{
  path: '/markets/:myparam',
  name: 'markets',
}

然后你会像这样过渡到它:

this.$router.push({ name: 'markets', params: { myparam: 'foo' } })

URL 看起来像:

/markets/foo

你还没有为你的路线定义任何参数,所以它不会工作。

其次,参数必须是字符串或数字。您不能将对象作为参数传递。没有办法做到这一点;它不受支持。我认为这里的理念是 URL 本身应该包含所有路由器状态。

解决这个问题的一种方法是传递一个 ID,然后从某个共享存储(例如 Vuex)中获取 ID 中的对象。

我不知道你的 stock 模型是什么,但也许参数可能只是一个像 msft 这样的字符串,所以 URL 像 /markets/msft?您能否在不需要传递完整对象的情况下使其工作?

如果是小对象,可以将对象的属性解构为查询参数。但是您不能像将对象作为参数传递给函数调用那样将对象实例与路由转换一起传递。

关于javascript - 推送路线时将对象作为 Prop 传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60770633/

相关文章:

javascript - 从 Vue 的渲染函数中控制子节点

javascript - 如何创建我的网络应用程序的小部件

javascript - javascript中是否有任何方法/方式可以动态地将子节点添加到列表元素?

javascript - 如何更改 Vuetify 日历日期格式

javascript - Vue 计算方法未被调用

lazy-loading - 懒加载Vue的父组件和所有嵌套的路由

javascript - ColumnChooser free-jqgrid 不适用于 IE9

javascript - 相同的 html 表单执行不同的操作

javascript - 我可以在 vuejs 循环中使用插槽吗?

javascript - 根据深色或浅色模式更改样式