#typescript #vue.js #vuetify.js
#typescript #vue.js #vuetify.js
Вопрос:
Я создал приложения и хотел изменить статус v-data-table в зависимости от идентификатора клиента. Итак, я сделал свой пример ниже. но какая-либо информация о состоянии не отображалась. Я использовал axios для получения RestAPI. Когда идентификатор из RestAPI равен 1 или 3, в таблице данных отображается «суперпользователь». Кто-нибудь посоветует мне?
<template>
<v-app>
<v-data-table
dense
:headers="headers"
:items="items"
class="elevation-1">
<template v-slot:items="{items}">
<tbody>
<tr v-for="item in items" :key="item.id">
<td>{{item.id}}</td>
<td>{{item.email}}</td>
<td>{{item.name}}</td>
<td>{{item.status}}</td>
</tr>
</tbody>
</template>
</v-data-table>
</v-app>
</template>
<script lang="ts">
import { Component, Vue } from 'nuxt-property-decorator'
import axios from 'axios'
@Component
export default class AxiosPractice extends Vue {
items: any=[]
status:string=''
headers = [
{ text: 'id', value: 'id' },
{ text: 'name', value: 'name' },
{ text: 'email', value: 'email' },
{ text: 'status', value: 'status' }
];
async mounted() {
const response = await axios.get(
'https://jsonplaceholder.typicode.com/posts/1/comments'
);
this.items = response.data.map((item:any) => {
const newStatus =
item.id === '1' || item.id === '3' ? 'supercustomer' : '';
return {
id: item.id,
email: item.email,
name: item.name,
status: newStatus
};
});
if(this.items.id = '1' || '3'){
return this.status = 'supercustomer'
}
}
}
</script>
Ответ №1:
Как отобразить статус:
Status
должен быть частьюitem
, иначе статус будет одинаковым для всех элементов. Итак, измените<td>{{status}}</td>
на<td>{{item.status}}</td>
. И измените{ text: 'status', value: '' }
на{ text: "status", value: "status" }
.this.items.id
недопустимо, посколькуthis.items
является массивом.- Также при проверке, равно ли значение строке, которую вы должны использовать
===
, что означает равное значение и равный тип. Подробнее о сравнениях смотрите здесь: https://www.w3schools.com/js/js_comparisons.asp
Что я бы сделал, так это добавил status
при сопоставлении элементов:
this.items = response.data.map(item => {
const newStatus =
item.id === '1' || item.id === '3' ? 'supercustomer' : '';
return {
id: item.id,
email: item.email,
name: item.name,
status: newStatus
};
});
Комментарии:
1. Спасибо за ваш совет. Я действительно ценю это. и я попытался отредактировать свой код, но это не сработало. Я думал, что неправильно понял ваш совет. Я редактирую код своих вопросов. Не могли бы вы дать мне совет?
2. codesandbox: codesandbox.io/s/cool-darkness-fwhv8?file=/src/components/… Обратите внимание, что я не использовал typescript, но его ядро должно быть таким же.