У меня есть таблица, написанная в vue / element-ui. В этой таблице есть повторяющиеся столбцы, которые я пытаюсь преобразовать в разные компоненты для повторного использования. Когда я пытаюсь выполнить рефакторинг, я получаю одну из нескольких ошибок:
- Выпадающие списки вообще не обновляются при выборе параметра.
- Различные раскрывающиеся списки ведут себя так, как если бы они были одним целым. Это означает, что они обновляются, чтобы всегда быть одним и тем же вариантом
Поскольку у меня есть повторяющиеся столбцы и поскольку я должен отслеживать их значения, передача компонента на внешний подряд имеет для меня смысл. Поэтому я попытался передать на аутсорсинг всю родительскую таблицу-столбец или только отдельные дочерние столбцы, заключенные в div.
Я также попытался разместить выборки в отдельной области, что дает мне вторую ошибку, описанную выше. Я думал о том, что, возможно, каждый select будет в отдельном компоненте, но тогда мне пришлось бы генерировать события всякий раз, когда они меняются, чтобы обновить текстовое поле, и сейчас было бы проще просто связать все вместе в другом компоненте.
Это базовый код таблицы:
<template>
<div>
<el-table :data="tableData">
<el-table-column label="Initial Risk">
<Calc/>
</el-table-column>
<el-table-column label="Residual Risk">
<Calc/>
</el-table-column>
</el-table>
</div>
</template>
<script>
import Calc from "./Calc.vue";
export default {
components: {
Calc
},
data() {
return {
tableData: [{}, {}]
};
}
};
</script>
Это базовый код Calc-компонента:
<template>
<div>
<el-table-column></el-table-column>
<el-table-column label="Severity" width="100">
<template slot-scope="scope">
<el-select
placeholder="Select"
v-model="scope.row.severitySelect"
>
<el-option
v-for="severity in severities"
:key="severity"
:label="severity"
:value="severity"
></el-option>
</el-select>
</template>
</el-table-column>
</div>
</template>
<script>
export default {
data() {
return {
severities: ["negligible", "minor", "major", "severe", catastrophic"]
};
}
};
</script>
Вы можете найти более полный пример множественного выбора и поля ввода здесь: https://codesandbox.io/s/vueelementui-ymgi0
Теперь я ожидал, что каждый компонент будет управлять своими собственными данными, но как только выбранные элементы будут помещены в столбец el-table-column, они, похоже, больше не будут работать так, как ожидалось, и будут вести себя так, как описано выше.