#vue.js #vue-component
#vue.js #vue-component
Вопрос:
Я создаю динамическую HTML-таблицу с помощью vue js, которая получает данные с сервера. Данные включают «столбцы», которые представляют собой массив с объектами сервера, включая заголовок таблицы (ключ — title), ‘q’ — это тип значения каждого столбца, сгенерированного на основе имени столбца таблицы базы данных, ‘content» — метода отображения значения. например, content=’содержимое»:», ячейка будет отображаться как «.
HTML-часть
<div id="app3">
<table class="table table-bordered">
<thead>
<tr>
<th scope="col" v-for="c in columns" v-text="c.title"></th>
</tr>
</thead>
<tbody>
<vue-cell:rows="rows" :columns="columns">
</vue-row>
</tbody>
</table>
</div>
Часть Vue js
<script>
var columns =[
{'q': "id",
'title': 'id',
'content":'<input type="checkbox">'
},
{'q': "type",
'title': 'Type',
'content":''
},
]
var rows=[
{'id': 1,
'type':"Server",
},
{'id': 2,
'type':"PC",
},
]
создайте компонент для перебора строк и столбцов
Vue.component('vue-cell', {
name:'inputBox',
props: {
rows: Array,
columns: Array,
},
render: function (createElement) {
var self = this
return createElement('tr', self.rows.map(function(row) {
return createElement('td', self.columns.map(function(column) {
// comlum.q = id or type ...
// column['content'] = <input type="checkbox">
//assign row.id as defalut value
if (column['content'].includes('checkbox')) {
return createElement('input', {
attrs: {
type: "checkbox",
},
domProps: {
// column.q may not be 'id' maybe type
// get the value of type or id in a row.
value: row[column.q],
}
})
} else {
return row[column.q];}
}))
}))
},
})
Создайте новый Vue
new Vue ({
data: function() {
return {
columns: [],
rows:[],
}
},
created: function() {
var self = this;
axios.("/web/asset-json.html").then(function (response) {
self.columns = [...response.data.columns];
self.rows = [...response.data.rows]
})
}
})
</script>
Комментарии:
1. Ваш единственный отдельный компонент не может возвращать несколько родительских компонентов. Рассмотрите возможность использования
<tr is="vue-cell" :columns="columns" v-for="(row, index) in rows" :key="index"></tr>
и выделите отображение этих строк на индивидуальной основе. прокрутите до конца документации2. При использовании цикла (т.Е.
self.columns.map(...)
) вам необходимо предоставить уникальноеkey
значение для каждого сгенерированного корневого элемента. vuejs.org/v2/guide/render-function.html#createElement-Arguments и vuejs.org/v2/guide /…