vue v-for循环中item值的问题

问题描述:
我想复用一个写好的公共组件

<template>
    <ul>        
      <li v-for="(item, index) in items" :key=index>
        <div>
          <h2>{{item.name}}</h2>
        </div>
      </li>
    </ul></template>

其中两个items的数据结构分别如下:

items1: [
  { name: 'a' },
  { name: 'b' },
  { name: 'c' }
]items2: [
  { data: { name: 'a' } },
  { data: { name: 'b' } },
  { data: { name: 'c' } }
]

传items1时,获取name是:item.name,
传items2时,获取name是:item.data.name
除了数据结构略有不同外,其他内容一样,所以想复用这个组件

我的思路: 
在这个组件中写两个ul ,然后用一个标识去控制显示的是item.name 还是item.data.name,但是又觉得这种方法太笨,跟重新写一个组件没啥区别。

请问: 有遇到这种情况的人吗,大家都是怎么解决的(不要说跟后台商量把数据结构改为一致。。。)


叮当猫咪
浏览 5553回答 2
2回答

浮云间

写一个&nbsp;computed&nbsp;做兼容层computed:&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;fItem&nbsp;()&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(this.item.length&nbsp;==&nbsp;0)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;[];&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(this.item[0].data)&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;this.item.map((v)&nbsp;=>&nbsp;v.data); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;else&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;this.item; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;} }然后循环:fItem&nbsp;就行了
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Vue.js