Я пытаюсь получить ИМЯ из списка в таблице данных. Итак, ниже приведен код, который я написал.
HTML-шаблон -
<v-data-table :headers = "headers" :items = "topics" :footer-props = "{'items-per-page-options': [5, 10, 20, 40]}" :items-per-page = "10" item-key = "srno">
<template v-slot:item.skillName = "{ item }">
<span>{{ item.skillName || '-' }}</span>
</template>
</v-data-table>
export default {
data () {
return {
skills: [
{
name: ''
}
],
topics: [],
headers: [
{ text: 'Sr No', value: 'srno', align: 'center', sortable: true },
{ text: 'Skills', value: 'skills', align: 'center' },
],
skillName: [],
}
},
created: async function () {
await this.getAllList()
},
methods: {
getAllList: async function () {
try {
this.isLoading = true
let r = []
let res = await http.get(`${CONSTANTS.API_URL}/api/getall-themes`, {
params: {
page: this.page - 1,
size: this.pageSize
// search: this.search
}
})
this.topics = res.data.rows.map((item, index) => {
item.srno = this.pageSize * (this.page - 1) + index + 1
item.skillName = item.Skills ? item.Skills.name : '-'
return item
})
this.totalPages = res.data.totalPages
} catch (e) {
const errorMessage = (e && e.response && e.response.data.message) || e.message
this.errMsg(errorMessage)
} finally {
this.isLoading = false
}
},
ОШИБКА - skillName становится неопределенным.
Ожидаемый результат — Письмо, Пение должны войти в skillName
Вы не объявляете столбец skillnName
в заголовке, только skills
:
Пытаться:
export default {
data () {
return {
...
headers: [
{ text: 'Sr No', value: 'srno', align: 'center', sortable: true },
{ text: 'Skills',
value: 'skills', // <---- probably should be skillName
align: 'center' },
],
}
},
или
<v-data-table :headers = "headers" :items = "topics" :footer-props = "{'items-per-page-options': [5, 10, 20, 40]}" :items-per-page = "10" item-key = "srno">
<template v-slot:item.skills = "{ item }"> <!-- <-------- slot name should match header.value -->
<span>{{ item.skillName || '-' }}</span>
</template>
</v-data-table>
Кроме того, по вашим данным, вы хотите использовать здесь массив, поэтому вам нужно создать из него что-то для печати. Попробуйте что-то вроде {{ item.Skills.map(s => s.name).join(',') || '-' }}
в шаблоне.
Если вам не нужны сложные выражения в шаблоне, у вас есть другие варианты:
{{ formatSkills(item) }}
{{ item.getSkillsString() }}
async fetchData(){
const items = await loadItems()
items.forEach(item => item.skillsCsv = item.Skills.map(s => s.name).join(',')
}
Последний обычно является предпочтительным вариантом в Vue, он позволяет вам работать без слота, просто установите новое свойство в объявлении заголовка:
{ text: 'Skills', value: 'skillsCsv', align: 'center' },
Однако обратите внимание, что это не реактивно, если вы добавляете навыки к предмету, вам нужно перестроить реквизит `skillsCsv` вручную (или вы обрабатываете его через сеттер).
Конечно, вы всегда можете использовать Skills
прямо в шаблоне:
<template v-slot:item.Skills = "{ item }">
<span v-for = "skill in item.Skills" :key = "skill.id">
{{ skill.name}}
</span>
</template>
@kiran только что обновил его, {{ item.name || '-' }}
работает?
@mortiz это будет МУЗЫКАЛЬНАЯ ТЕМА. Ниже есть еще один элемент, называемый именем, он принимает свое значение.
@Mortiz Вместо того, чтобы делать это в шаблоне, можем ли мы сделать это в функции?
@kiran Обновил ответ, забыл самое очевидное решение, лол
измените значение, но все равно оно показывает undefined