#javascript #vue.js #element-ui
Вопрос:
Я хочу использовать две разные таблицы el для настольного и мобильного режимов. Я хотел сделать это с помощью простого v-if, но каким-то образом таблицы, похоже, перетекают друг в друга, даже если другая даже не отображается. Иногда курсор отображается в настольной версии, а иногда настольная версия наследует визуальный элемент мобильной версии (расширенный режим).
<el-table
ref="mobileTable"
v-if="device==='mobile'"
:data="tableData"
>
<el-table-column type="expand">
<template slot-scope="props">
<p>State: {{ props.row.state }}</p>
<p>City: {{ props.row.city }}</p>
<p>Address: {{ props.row.address }}</p>
<p>Zip: {{ props.row.zip }}</p>
</template>
</el-table-column>
<el-table-column
label="Date"
prop="date"
/>
<el-table-column
label="Name"
prop="name"
/>
</el-table>
<el-table
ref="desktopTable"
v-if="device!=='mobile'"
:data="tableData"
>
<el-table-column
fixed
prop="date"
label="Date"
width="150"
/>
<el-table-column
prop="name"
label="Name"
width="120"
/>
<el-table-column
prop="state"
label="State"
width="120"
/>
<el-table-column
prop="city"
label="City"
width="120"
/>
<el-table-column
prop="address"
label="Address"
width="300"
/>
<el-table-column
prop="zip"
label="Zip"
width="120"
/>
<el-table-column
fixed="right"
label="Operations"
width="120"
>
<template>
<el-button type="text" size="small">Detail</el-button>
<el-button type="text" size="small">Edit</el-button>
</template>
</el-table-column>
</el-table>
tableData: [
{
date: '2016-05-03',
name: 'Tom',
state: 'California',
city: 'Los Angeles',
address: 'No. 189, Grove St, Los Angeles',
zip: 'CA 90036'
}, {
date: '2016-05-02',
name: 'Tom',
state: 'California',
city: 'Los Angeles',
address: 'No. 189, Grove St, Los Angeles',
zip: 'CA 90036'
}, {
date: '2016-05-04',
name: 'Tom',
state: 'California',
city: 'Los Angeles',
address: 'No. 189, Grove St, Los Angeles',
zip: 'CA 90036'
}, {
date: '2016-05-01',
name: 'Tom',
state: 'California',
city: 'Los Angeles',
address: 'No. 189, Grove St, Los Angeles',
zip: 'CA 90036'
}, {
date: '2016-05-08',
name: 'Tom',
state: 'California',
city: 'Los Angeles',
address: 'No. 189, Grove St, Los Angeles',
zip: 'CA 90036'
}, {
date: '2016-05-06',
name: 'Tom',
state: 'California',
city: 'Los Angeles',
address: 'No. 189, Grove St, Los Angeles',
zip: 'CA 90036'
}, {
date: '2016-05-07',
name: 'Tom',
state: 'California',
city: 'Los Angeles',
address: 'No. 189, Grove St, Los Angeles',
zip: 'CA 90036'
}
],
V-else doesnt work, two seperate data-objects dont work. Reloading the refs with the el-table doLayout method doesnt work. I get even weirder results when I try to conditionally change the content of one el-table, instead of conditionally rendering two different tables. E.G. the caret dropdown appearing in the custom «operations» fixed element, which is insanely weird.
How can I fix/prevent this behaviour or should I not use element uis tables at all? Because they seem VERY buggy to me.
Edit: I found one fix, wrapping the el-table with an element which isnt conditionally rendered fixes the problem.
This works (but both cards will always be displayed):
<el-card><el-table v-if="!mobile"><!-- desktop --></el-table></el-card>
<el-card><el-table v-if="mobile"><!-- mobile --></el-table></el-card>
This doesnt (mixes up the el-table settings/formatting):
<el-card v-if="!mobile"><el-table><!-- desktop --></el-table></el-card>
<el-card v-if="mobile"><el-table><!-- mobile --></el-table></el-card>
Это означает, что если у вас уже есть элемент упаковки, такой как карта, вам все равно нужно это сделать:
<div><el-card v-if="!mobile"><el-table><!-- desktop --></el-table></el-card></div>
<div><el-card v-if="mobile"><el-table><!-- mobile --></el-table></el-card></div>