gpt4 book ai didi

javascript - 如何在 v-text 中使用条件运算符作为 Vue.Js 组件?

转载 作者:行者123 更新时间:2023-12-04 08:24:41 25 4
gpt4 key购买 nike

我正在使用 Vue.Js,也使用 Nuxt.js 作为框架,语言是 TypeScript。

我真的想使用以下数据制作如下表格。

export const dummy_taskData =
[
{
id: "common_task",
tasks: [
{
tid: "all#budget",
tname: "Invoie"
},
{
tid: "all#inquiry",
tname: "QA"
},
{
tid: "all#deskwork",
tname: "deskwork"
},
{
tid: "XX#business",
tname: "PaperWork"
},
{
tid: "XX#H&R",
tname: "PaperWork"
},
{
tid: "YY#H&R",
tname: "PaperWork"
}
]
}
]

my goal is like this

所以我尝试编写如下代码。

<template>
<v-simple-table dense>
<thead>
<tr>
<th>task</th>
<th>item</th>
<th>item2</th>
</tr>
</thead>
<tbody class="hover_stop">
<template v-for="(item,index,tid) in newItems">
<tr :key="tid">
<td v-if="tid === 0" :rowspan="newItems.length">common_task</td>
<td v-text="item.tid === newItems[item.index-1].tid?'':item.tid"></td>
<td>{{item.tname}}</td>
</tr>
</template>
</tbody>
</v-simple-table>
</template>
<script lang="ts">
import { Component, Vue } from 'nuxt-property-decorator'
import { dummy_taskData } from '~/store/dummy'

interface Tasks {
tid: string
tname: string
}
interface Items {
id: string
tasks: Tasks[]
}
@Component({})
export default class extends Vue {
items: Items[] = dummy_taskData
newItems:(Tasks|undefined)[] = []
mounted() {
let findCommon:Items[] = this.items.filter((e:Items)=>{
return e.id === 'common_task'
})
let makeNewItems = findCommon[0].tasks.map((item)=>{
if(item.tid.includes("all")){
return {tid:"all",tname:item.tname}
}
else if(item.tid.includes('XX')){
return {tid:"XX",tname:item.tname}
} else {
return {tid:item.tid,tname:item.tname}
}
})
this.newItems = makeNewItems
}
}
</script>
<style lang="scss" scoped>
.v-data-table--dense > .v-data-table__wrapper > table > tbody > tr > td, .v-data-table--dense > .v-data-table__wrapper > table > thead > tr > td, .v-data-table--dense > .v-data-table__wrapper > table > tfoot > tr > td{
border-bottom: thin solid rgba(255,255,255,0.12);
}
</style>

我运行了这段代码,但出现了如下错误

TypeError: Cannot read property 'tid' of undefined

我认为“条件运算符”是这种情况的最佳方式,但我无法修复我的代码。有人给我建议吗?

最佳答案

存在三个问题:

  1. 虽然newItems是一个数组,v-for使用 3 个参数对其进行迭代,这是一种仅用于迭代对象的语法。所以tid在循环中到处都是未定义的。您可以在 item.tid 上找到它相反。

  2. 您已尝试访问 item.index在其中一个 <td>s但是items没有 index属性(property),他们只有tidtname :

newItems[item.index-1]
  1. 即使语法正确,index-1当索引为 0 时将抛出错误,因为它将尝试查找索引为 -1 的元素的属性

这将解决所有问题:

<template v-for="(item, index) in newItems">
<tr :key="item.tid">
<td v-if="item.tid === 0" :rowspan="newItems.length">common_task</td>
<td v-text="index && item.tid === newItems[index - 1].tid ? '' : item.tid"></td>
<td>{{item.tname}}</td>
</tr>
</template>

关于javascript - 如何在 v-text 中使用条件运算符作为 Vue.Js 组件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65325228/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com