使用森林结构展示数据

  1. [{title, data: [record1,record2,...]},
  2. {title, data: [record1,record2,...]},
  3. ...]

在组件创建前先获取数据, 别忘了依赖于外部的数据要用计算属性computed, 这里使用getter/setter语法

  1. get recordList() {
  2. return this.$store.state.recordList
  3. }
  4. beforeCreate(){
  5. this.$store.commit('fetchRecords')
  6. }

在v-for中获取数组index的语法

  1. <ol>
  2. <li v-for="(record,index) in recordList" :key="index">
  3. {{record}}
  4. </li>
  5. </ol>

这个时间格式是ISO8061
image.png
获取森林结构数据

  1. get result(){
  2. const {recordList} = this;
  3. type HashTableValue = {title: string, items: RecordItem[]}
  4. const hashTable: {[key: string]: HashTableValue} = {}
  5. for(let i = 0; i < recordList.length; i++){
  6. const [date,time] = recordList[i].createAt.split('T')
  7. hashTable[date] = hashTable[date] || {title: date, items: []}
  8. hashTable[date].items.push(recordList[i])
  9. }
  10. return hashTable
  11. }

注意空对象类型表示方法:

  1. const hashTable: {[key: string]: HashTableValue} = {}

渲染数据

  1. <ol>
  2. <li v-for="(group,index) in result" :key="index">
  3. <h3>{{group.title}}</h3>
  4. <ol>
  5. <li v-for="(item,index) in group.items" :key="index">
  6. {{item.amount}} {{item.createAt}}
  7. </li>
  8. </ol>
  9. </li>
  10. </ol>

reset header

  1. h1, h2, h3, h4, h5, h6 {
  2. font-weight: normal;
  3. }