#vue.js #bootstrap-vue
#vue.js #bootstrap-vue
Вопрос:
У меня есть таблица с данными, в которую я хочу добавить нижний колонтитул, чтобы суммировать и отображать общее значение int в каждой строке.
Я попробовал следующий код.
У меня есть таблица следующего вида:
<b-table
id="myTable"
hover
striped
:items="myItems"
:fields="myFields"
show-empty
empty-text:"No items to display"
:foot-clone="true"
>
<template slot="FOOT_row" slot-scope="data">
<td>TOTAL<td>
<td/><td/>
<td><CurrencyFormatingComponent :Currency="data.Currency" :amount="this.CustomTotalFromData" class="pull-right"/></td>
</template>
</b-table>
Мои данные Vue
myItems:[
{ Col1: "stuff", Col2: "otherStuff", Col3: "moreStuff", Col4: 12},
{ Col1: "stuffer", Col2: "otherStuffer", Col3: "moreStuffer", Col4: 10}
],
myFields:[ 'Name', 'NickName', 'FavoriteMovie', 'netWorth' ]
То, что я получаю прямо сейчас, — это просто нижний колонтитул, который отражает заголовок.
Это соответствует документации по пользовательскому заголовку Bootstrap-Vue, но очень скупо на детали и не дает реальной информации о том, как добавить действительно пользовательскую информацию. Я просто хочу, чтобы мой шаблон отображался в нижнем колонтитуле.
РЕДАКТИРОВАТЬ: Хорошо, итак, я выяснил следующее. Все еще не то, что я хочу.
Я понял, что способ, которым Bootstrap-Vue настроен таким образом, что вы клонируете верхний колонтитул, а затем заменяете данные в каждом столбце.
итак, используя этот шаблон:
<template slot="FOOT_Name" >
Don't render "Name".
</template>
Это заменит текст «Name» в нижнем колонтитуле для столбца «Name» текстом, который я ввел; Don't render"Name".
Мне пришлось бы повторять этот шаблон для каждого слота, который я хочу изменить. В моем случае у меня есть 6 столбцов, поэтому мне нужно было бы иметь 5 пустых шаблонов между первым, чтобы указать Total
, и последним, чтобы отобразить эту сумму в обозначении валюты.
Что мне может понадобиться сделать, это просто вставить <div/>
, который имитирует нижний колонтитул, который я хочу, и прикрепить его к нижней части таблицы.
Комментарии:
1. В итоге я просто создал
<div></div>
, который содержал необходимую мне информацию под таблицей, гарантируя отсутствие отступов между таблицей и этим div. Это также позволило элементу реагировать на меньшие размеры экрана, когда bootstrap удаляет верхний и нижний колонтитулы, укладывает все столбцы подряд друг на друга с добавленной меткой заголовка к каждой точке данных столбца. Таким образом, строка заканчивается в виде столбца, где каждая строка является » Column1Label : Col1Data «. Тогда мой нижний колонтитул<div>
сохраняет желаемый формат, и я все еще внизу.
Ответ №1:
v-model
Of b-table
предоставляет массив отображаемых в данный момент элементов.
Вы можете использовать эти данные вместе с областью действия нижних колонтитулов для суммирования отображаемых строк.
Просто создайте несколько вычисляемых реквизитов, которые повторяют значение, предоставленное v-model
, чтобы сгенерировать нужные вам суммы.
<template>
<b-table :items="items" :fields="fields" v-model="visibleRows" foot-clone>
<template slot="FOOT_a" slot-scope="scope">
{{ aTotal }}
</template>
<template slot="FOOT_b" slot-scope="scope">
{{ bTotal }}
</template>
</b-table>
</template>
<script>
export default {
data() {
return {
items: [
{ a: 1, b: 2 },
{ a: 3, b: 4 },
{ a: 1.5, b: 3 }
],
fields: ['a', 'b'],
// b-table will populate this array with the visible rows in the table
visibleRows: []
}
},
computed: {
aTotal() {
return this.visibleRows.reduce((accum, item) => { return accum item.a }, 0.0)
},
bTotal() {
return this.visibleRows.reduce((accum, item) => { return accum item.b }, 0.0)
}
}
}
</script>