【问题标题】:How do I display data on detailpage in vue?如何在 vue 的详细信息页面上显示数据?
【发布时间】:2020-10-20 22:54:12
【问题描述】:

我有一个显示所有啤酒列表的啤酒列表页面。 我制作了一个按钮,应该链接到特定啤酒的详细信息页面

在路由器中,我为此做了一个路由:

import Vue from "vue";
import VueRouter from "vue-router";
import Home from "../views/Home.vue";

Vue.use(VueRouter);

const routes = [
  {
    path: "/",
    name: "Home",
    component: Home,
  },
  {
    path: "/:beerId/BeerDetails",
    name: "BeerDetails",

    props: true,
    // route level code-splitting
    // this generates a separate chunk (about.[hash].js) for this route
    // which is lazy-loaded when the route is visited.
    component: () =>
      import(/* webpackChunkName: "about" */ "../components/BeerDetails.vue"),
  },
];

const router = new VueRouter({
  mode: "history",
  base: process.env.BASE_URL,
  routes,
});

export default router;

在 Beers 组件中,我创建了链接

<template>
  <div class="container">
    <b-card
      v-bind:key="beer.id"
      v-for="beer in beers"
      :img-src="beer.image_url"
      :alt="beer.name"
      img-top
      tag="article"
      style="max-width: 22rem  ;"
      class="mb-2"
    >
      <b-card-text class="c-text">
        <h4 class="title">{{ beer.name }}</h4>
        <p>{{ beer.ingredients.malt[0].name }}</p></b-card-text
      >

      <router-link :to="{ name: 'BeerDetails', params: { beerId: beer.id } }">
        <b-button variant="primary">View Beer details</b-button></router-link
      >
    </b-card>
  </div>
</template>
<script>
export default {
  components: {},
  name: "Beers",
  props: ["beers"],
};
</script>

所以当我点击按钮并查看 vue 开发工具时,它会告诉我 props 是 beerId

但是当我做 {{beerId.name}} 时,我无权访问任何其他属性 那么有人可以告诉我我做错了什么以及如何解决它吗?

【问题讨论】:

  • 您可以将整个啤酒对象添加为属性。这将用作组件道具,params: { beerId: beer.id }, props: { beer }。那么你应该可以在你的组件中访问this.beer
  • 我尝试了你的建议,但是当我使用 this.beer.name 时,它​​在 vue devtools props beer is undefined 中显示 .. ?

标签: vue.js vue-router


【解决方案1】:

嗯,你传递的是一个 ID(很可能是一个 INT)而不是一个对象。

 params: { beerId: beer.id }

因此您可以访问一个没有属性的整数(ID)。 如果你想访问所有的属性,你应该传递和对象

 params: {beerId: beer.id, beer: beer }

仅传递 ID,如果您在第二个请求中加载特定的啤酒详细信息(例如,当啤酒页面被挂载时),则有意义

【讨论】:

  • 我想加载我点击的那个啤酒的具体啤酒详情,但我也想访问那个具体啤酒的所有属性。并且由于某种原因它没有通过啤酒的道具
  • 我也这样做了,但是当我重新加载时,对象消失了......
  • 这很正常,因为商店在刷新时被清空。要存储这些值,您应该在 browser.storage 或 cookie 中设置最新的 app store.state。
  • 我现在已经开始使用 vuex 将我获取的数据存储在 store 中,那么我现在如何存储这个单一的啤酒呢?
  • 要添加到你使用突变的商店,这是改变状态的唯一可用方法。如果你想持久化数据,那就另当别论了(比如刷新页面时),你应该使用浏览器存储或 cookie 来存储这些信息,看这里:medium.com/js-dojo/…
猜你喜欢
  • 2018-04-27
  • 1970-01-01
  • 2023-03-30
  • 2020-12-06
  • 2018-12-02
  • 1970-01-01
  • 1970-01-01
  • 2016-04-26
  • 1970-01-01
相关资源
最近更新 更多