使用 v-for 时出现问题。带点的道具不显示

Posted

技术标签:

【中文标题】使用 v-for 时出现问题。带点的道具不显示【英文标题】:Problem while using v-for. Props with dots do not show up 【发布时间】:2021-06-12 04:14:07 【问题描述】:

我在表格中显示数据时遇到问题。当我尝试将道具发送到我的表格组件时,一切正常,来自https://jsonplaceholder.typicode.com/users 的数据显示完美(例如姓名、电子邮件)但是如果数据中有一个对象(例如 company.name),则数组不会显示该元素.

这是我的 Axios 请求,带有 TH 元素的 configList 和发送的 props

<template>
<section>
  <header>
    <h1></h1>
  </header>
  <main class="container">
    <Table :config="configList" :dataTable="usersList"/>
  </main>
</section>
</template>

<script>
import Table from "@/components/Table.vue"

export default 
  components: 
    Table
  ,
  data() 
    return 
      usersList: null,
      configList: [
        
          key: "name",
          name: "Imię i nazwisko",
        ,
        
          key: `email`,
          name: "E-mail",
        ,
        
          key: `company.name`,
          name: "Nazwa firmy",
        ,
        
          key: "address.city",
          name: "Miasto",
        ,
        
          key: "website",
          name: "Strona internetowa",
        
      ]
    
  ,
  async mounted() 
    const users = await this.$axios.$get("https://jsonplaceholder.typicode.com/users")
    this.usersList = users
    console.log(users[0].address.city)
  

</script>

这里,我的表格组件

<template>
  <table>
      <thead>
        <tr>
          <th v-for="(item, id) in config" :key="id">
             item.name 
          </th>
        </tr>
      </thead>
      <tbody>
        <tr v-for="(row, id) in dataTable" :key="id">
          <td v-for="(item, id) in config" :key="id">
             row[item.key] 
          </td>
        </tr>
      </tbody>
    </table>
</template>

<script>
export default 
props: ["config", "dataTable"],

</script>

我不知道如何显示 company.name 和 address.city。姓名、电子邮件或网站等简单数据运行良好。

【问题讨论】:

【参考方案1】:

这是因为属性名称中的点。

如果你想显示它,试试这个:

 item['company.name']

【讨论】:

但是我需要使用 row[item.key] ,我需要根据configList动态渲染数据【参考方案2】:

由于您想从配置列表中动态访问该属性,因此我稍微调整了代码以按照您想要的方式工作。

我修改了 configList 对象并添加了 "dataProp" 并重命名了 "key to propKey",这里是新对象:

configList: [
        
          propKey: "name",
          name: "Imię i nazwisko",
        ,
        
          propKey: `email`,
          name: "E-mail",
        ,
        
          dataKey: 'company',
          propKey: `name`,
          name: "Nazwa firmy",
        ,
        
          dataKey: 'address',
          propKey: "city",
          name: "Miasto",
        ,
        
          propKey: "website",
          name: "Strona internetowa",
        
      ]
    

然后我修改了您的 Table.vue 组件,它只是以下几行:

<tbody>
        <tr v-for="(row, id) in dataTable" :key="id">
          <td v-for="(item, id) in config" :key="id">
             item.dataKey ? row[item.dataKey][item.propKey] : row[item.propKey] 

          </td>
        </tr>
      </tbody>

它将根据您的需要工作,您也可以自定义它。

【讨论】:

以上是关于使用 v-for 时出现问题。带点的道具不显示的主要内容,如果未能解决你的问题,请参考以下文章

调整浏览器窗口大小时如何显示带点的文本? [复制]

将 Vue.JS 道具发送到 JavaScript 函数时出现问题

带点的按钮分页

使用 graphql 将道具传递给高阶组件时出现 React-apollo Typescript 错误

nuget.exe 包排除不带点的文件

带点的 DataTable 列名称是啥导致它们不适合 WPF 的 DataGrid 控件?