Вам нужно посмотреть на соответствие динамического маршрута: https://router.vuejs.org/guide/essentials/dynamic-matching.html#reacting-to-params-changes
Затем вам нужно использовать axios.get в представлениях счетов-фактур beforeMount , где this. $ Route.params.id будет содержать нужный идентификатор счета-фактуры загрузить, если ссылка применяется так:
<router-link :to="`/ct-invoice-view/${ctInvoice.id}`">
<i class="fas fa-eye fa-lg text-blue"></i>
</router-link>
Другой способ ...
Я предлагаю не уходить от списка, это может раздражать пользователей, которые отфильтровали список, а затем вернулись к нему, чтобы просмотреть дополнительные счета-фактуры, и пришлось снова фильтровать, если параметры фильтра и текущие результаты не являются "липкими"
Есть несколько способов сделать это, и они длинны для примера. Как правило, я бы правильно использовал модальный , а представление счета-фактуры загружало данные на дисплей, но чтобы вы начали базовую в решении страницы, чтобы поэкспериментировать, затем попробуйте позже адаптироваться в модальном компоненте многократного использования:
<button @click="showInvoice = ctInvoice.id">
<i class="fas fa-eye fa-lg text-blue"></i>
</button>
data() {
return {
loading: false,
invoice: {},
customers: null
};
},
computed: {
showInvoice: {
get: function() {
return this.invoice.hasOwnProperty('id');
},
set: function(value) {
if(value === false) {
this.invoice = {};
return;
}
// could check a cache first and push the cached item into this.invoice else load it:
this.loading = true;
axios.get("api/ct-invoice/show/" + value).then(response => {
// you could push the invoice into a cache
this.invoice = response.data;
}).cache(error => {
// handle error
}).finally(() => {
this.loading = false;
});
}
}
}
В компоненте view-invoice есть кнопка закрытия с привязкой @ click = "$ emit ('close')"
Проверьте, как работает $ emit: https://vuejs.org/v2/guide/components-custom-events.html
<div v-if="loading" class="loading-overlay"></div>
<view-invoice v-if="showInvoice" :invoice="invoice" @close="showInvoice = false" />
<table v-else>....</table>
Скрыть таблицу при отображении счета, поэкспериментировать с использованием v-show вместо v-if при потере состояния содержимого таблицы.
Внутри вашего счета-фактуры свойство под названием invoice будет содержать данные счета.
Проверьте эту статью о том, как использовать реквизит: https://vuejs.org/v2/guide/components-props.html
Подсказка: @close слушает $ emit ('close')
Может также использоваться при переключении между таблицей и представлением счета.
https://vuejs.org/v2/guide/transitions.html