#vue.js #vuejs2 #vue-component
#vue.js #vuejs2 #vue-компонент
Вопрос:
Я пытаюсь передать массив компоненту Vue для построения таблицы, однако я получаю сообщение об ошибке, в котором говорится, что я передаю строку вместо массива.
Компонент:
<template>
<div>
<table>
<thead>
<tr>
<th v-for="(column, index) in columns" :key="index"> {{column}}</th>
</tr>
</thead>
<tbody>
<tr v-for="(item, index) in items" :key="index">
<td v-for="(column, indexColumn) in columns" :key="indexColumn">{{item[column]}}</td>
</tr>
</tbody>
</table>
</div>
</template>
<script>
export default {
props: {
column: Array,
item: Array,
},
}
</script>
Как я вызываю компонент:
<nexdatatable column="['a','b']" item="['a','b']"></nexdatatable>
Комментарии:
1. Используйте синтаксис привязки для отправки необработанных выражений, объектов и массивов:
:column=...
илиv-bind:column=...
(обратите внимание на добавление:
)2. Пожалуйста, ответьте на вопрос, чтобы я мог пометить его как правильный.
Ответ №1:
Некоторые ошибки
<th v-for="(column, index) in columns" :key="index"> {{column}}</th>
в цикле for имя вашей переменной columns
равно, но имя массива prop равно column
column: Array,
это должно быть то же самое
та же ошибка для элементов
<tr v-for="(item, index) in items" :key="index">
items
не определено в prop
реквизит должен быть
props: {
columns: Array,
items: Array,
},
теперь вызовите компонент следующим образом (вы можете использовать :cloumns
или v-bind:cloumns
)
<nexdatatable v-bind:columns="['a','b']" v-bind:items="['a','b']"></nexdatatable>
Ответ №2:
Вы можете передать массив в prop
const app = new Vue({
data(){
return {
columnArray: ['a','b'],
itemArray: ['a','b'],
};
},
methods: {
confirm(){
alert('hello');
}
}
})
app.$mount("#app")
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script>
<div id="app">
<nexdatatable :column="columnArray" :item="itemArray"></nexdatatable>
</div>