【发布时间】:2019-03-07 21:15:45
【问题描述】:
所以我正在使用通过 API 获取的项目填充数据表,它工作正常,但如果我想编辑任何字段,它就不太正常了。
仅当我手动执行搜索或排序等操作时,该项目才会更新。 (数据表内)
我要修改的字段是 item.tuning 和 item.url 通过 getTab()
<v-data-table
class="tableElem"
:headers="headers"
:items="playlist"
:loading="loadingPlaylist"
:search="search"
:pagination.sync="pagination"
:rows-per-page-items="[15]"
hide-actions
>
<v-progress-linear slot="progress" color="purple" indeterminate></v-progress-linear>
<template slot="items" slot-scope="props">
<td>{{ props.item.artist }}</td>
<td class="text-xs-right">{{ props.item.track }}</td>
<td class="text-xs-right">{{ props.item.tuning | tuning }}</td>
<td class="text-xs-right">
<v-btn
v-if="props.item.url"
depressed outline light
style="margin-top:1rem;margin-bottom:1rem;"
:href="props.item.url"
target="!blank">
Tab
</v-btn>
<div class="text-xs-center" v-else-if="props.item.url == false">No tab :(</div>
<v-btn
v-else
depressed outline light
style="margin-top:1rem;margin-bottom:1rem;"
v-on:click="getTab(props.item.artist, props.item.track, props.item)">
Get Tab
</v-btn>
</td>
</template>
<v-alert slot="no-results" :value="true" style="color:black;" icon="warning">
Your search for "{{ search }}" found no results.
</v-alert>
</v-data-table>
方法:
getTab(artist, track, item) {
//const tabURL = "https://stark-beyond-77127.herokuapp.com/spotify/gettab";
let itemIndex = this.playlist.indexOf(item)
const tabURL = "http://localhost:5000/spotify/gettab";
const tabJSON = {
artist: artist,
track: track
};
axios.post(tabURL, tabJSON).then(response => {
let tuning = response.data[0].tuning;
let url = response.data[0].url;
this.playlist[itemIndex] = { ...this.playlist[itemIndex], ...{ tuning: tuning, url: url } };
console.log(this.playlist[itemIndex]);
});
}
我的猜测是我必须使用 computed: 或 watch: 但不知道如何实现它。 谢谢
【问题讨论】:
-
您是如何尝试修改这些字段的?通过编辑按钮还是在线编辑?
-
@Jaya 有一个按钮 Get Tab 触发函数 getTab 插入从 API 获得的结果以纠正数组中的索引(如果有任何意义)。那么对于不同类型的结果有 v-if if(props.item.url)else if(props.item.url == false) 和 else。所以我要找的基本上是函数完成后文本相应更新
标签: javascript vue.js vuetify.js