在Vue中推送路线时,是否可以通过 prop 传递数据?

cx6n0qe3  于 2023-02-24  发布在  Vue.js
关注(0)|答案(1)|浏览(135)

我问这个问题是为了了解我们在新的路线上是否可以通过 prop 传递一些数据,因为我读了一些文章,建议通过 prop 传递数据,我想知道这是否真的有效。
就像我看过的文档一样,在路线中传递 prop 只适用于两种情况-
1.当你想使用传递的参数作为 prop 时。

{ path: '/user/:id', component: User, props: true },

1.当您想要传递一些静态数据时。

{ path: '/user/:id', component: User, props: { value: 123 } },

在这两种情况下,我们都在路线定义中使用props属性。

我的问题是,如果我们想在推送到新路由时通过props传递一些数据,这可行吗?因为我尝试过这个方法,注意到传递的props总是未定义的。有相同的issue on GitHub说明了这个问题,但我不理解他们的最后一条注解。

这是一个演示,它显示了传递的 prop 总是在模板中未定义。
一个二个一个一个

a8jjtwal

a8jjtwal1#

这里所说的是,您不能动态地将数据传递给路由,除非它位于路由记录的参数中或静态提供

什么是路由参数?

route参数是url的一部分,它应该匹配某些东西,但仍然绑定到给定的组件。例如,在这个route记录中,:id是一个route参数。它是动态的。

const routes: Route[] = [
  {
    name: 'user-detail',
    path '/users/:id',
    component: UserDetailView,
  },
];

现在,route记录中的props属性用于读取URL中的不同参数。您可以通过两种方式实现此目的:

export default defineComponent({
  props: {
    id: string; // Route params are strings, I'm not sure if you can parse them first
  },

  // Composition API
  setup(props) {
    // Method 1
    const route = useRoute();
    const userId = route.params.id;

    // Method 2
    const userIdFromProps = props.id
  },

  // Options API
  created() {
    // Method 1
    const userId = this.$route.params.id;

    // Method 2
    const userIdFromProps = this.id; (this.id reads the prop id)
  },
});
那么使用 prop 有什么意义呢?

我可能是错的,但我看到的唯一用例是当您想使用组件作为路线视图时。
你有一个组件可以接受你在另一个视图中使用的 prop ,这个组件完全符合你的需求,所以你不用把它 Package 在一个视图中,而是直接把它作为一个路线的视图, prop 会自动传递下去。

我的想法

鉴于我在许多使用vue构建的应用程序中的经验,这种情况很少发生。路由url中的参数通常与资源的ID匹配,并且通常在将其传递给组件之前获取它。所以无论如何,我会使用 Package 器,而不会在路由记录中使用props。

答案:

在所有这些解释之后,我忘记了回答,因为这个问题不应该被问到:
推送新路线时不能传递 prop ,如果路线记录中使用props: true,则从URL读取 prop ,如果静态定义路线,则从路线定义(记录)读取 prop 。
如果要推送数据:

  • 您可以在URL中提供资源ID,让您推送的页面获取它
  • 您可以将其保存在localStorage中(不推荐,这意味着您的应用程序架构可能不适合您的需求),然后在下一页中检索它

相关问题