gpt4 book ai didi

javascript - 如何基于 JSON 对象使 Vuetify 中的 @click 动态化

转载 作者:行者123 更新时间:2023-12-01 00:12:53 24 4
gpt4 key购买 nike

我有一个显示列表的组件。该列表由使用该组件的页面动态填充。

<template>
<v-list
subheader
>
<v-subheader class="font-weight-black">Choose action</v-subheader>
<v-divider/>
<v-list-item
v-for="(item, i) in model.menu"
:key="i"
@click="item.action"
>
<v-list-item-title>{{ item.title }}</v-list-item-title>
</v-list-item>
</v-list>

</template>

这是 TypeScript 类。

<script lang="ts">
import { Component, Vue, Watch, Prop } from 'vue-property-decorator'
import { app } from 'electron'

@Component
export default class ListItem extends Vue {
@Prop() appStatus!: string
@Prop() appId!: string

model: any = {
menu: [
{ title: 'Title One', action: 'someModalAction(appId)' },
{ title: 'Title Two', action: '' },
{ title: 'Title Three', action: '' }
]
}

someModalAction( appId: string ) {
// show some modal here
}
</script>

这里的 model 对象是动态的,其他页面会将此对象作为 Prop() 传递(这只是一个示例)。

当我点击标题一时,没有任何反应。但是,当我将对象更改为

{title: 'Title One', action: this.someModalAction(this.appId)}

然后我可以在页面加载时看到模式。当我关闭此模式时,无法单击列表项。

那么,如何动态地将操作传递给 @click

最佳答案

使用 getter 转换数据:

import { Component, Vue, Watch, Prop } from 'vue-property-decorator'
import { app } from 'electron'

@Component
export default class ListItem extends Vue {
@Prop() appStatus!: string
@Prop() appId!: string

model: any = {
menu: [
{ title: 'Title One', action: 'someModalAction' },
{ title: 'Title Two', action: '' },
{ title: 'Title Three', action: '' }
]
}
get items(){
return this.model.menu

.map(item => ({...item, action: item.action && () => this[item.action](this.appId)})
}

someModalAction( appId: string ) {
// show some modal here
}
<template>
<v-list
subheader
>
<v-subheader class="font-weight-black">Choose action</v-subheader>
<v-divider/>
<v-list-item
v-for="(item, i) in items"
:key="i"
@click="item.action"
>
<v-list-item-title>{{ item.title }}</v-list-item-title>
</v-list-item>
</v-list>

</template>

关于javascript - 如何基于 JSON 对象使 Vuetify 中的 @click 动态化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59948099/

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