我在Vue.js中有一个带有Vue-good-table的表格。
我需要找到一种方法来调整它的大小。这样的事情。 https://codepen.io/validide/pen/aOKLNo
不幸的是,据我所知,Vue-good-table没有此选项。 https://github.com/xaksis/vue-good-table/issues/226
我使用JQuery进行了测试,但是我不想混合使用Jquery和Vue,而且我不知道Jquery中的库是否可以与此组件一起使用。我进行了测试,但没有找到任何东西。
Javascript / css或Vue中还有另一种方法吗?
<vue-good-table
@on-select-all="'selectAll'"
:columns="columns"
:rows="rows"
:select-options="{ enabled: true }"
@on-selected-rows-change="selectionChanged"
:sort-options="{
enabled: true
}"></<vue-good-table>
谢谢。
答案 0 :(得分:2)
为什么不使用自己的原始JavaScript解决方案创建不渲染的包装组件?像这样:
http://jsfiddle.net/thrilleratplay/epcybL4v/
(function () {
var thElm;
var startOffset;
Array.prototype.forEach.call(
document.querySelectorAll("table th"),
function (th) {
th.style.position = 'relative';
var grip = document.createElement('div');
grip.innerHTML = " ";
grip.style.top = 0;
grip.style.right = 0;
grip.style.bottom = 0;
grip.style.width = '5px';
grip.style.position = 'absolute';
grip.style.cursor = 'col-resize';
grip.addEventListener('mousedown', function (e) {
thElm = th;
startOffset = th.offsetWidth - e.pageX;
});
th.appendChild(grip);
});
document.addEventListener('mousemove', function (e) {
if (thElm) {
thElm.style.width = startOffset + e.pageX + 'px';
}
});
document.addEventListener('mouseup', function () {
thElm = undefined;
});
})();
没有必要使用jQuery。您可以使用自定义的无渲染组件包装表格,并使用this.$el
和document.querySelector
深入了解其插槽组件。
答案 1 :(得分:1)
您可以在vanillajs中尝试此库 https://github.com/MonsantoCo/column-resizer
<div id="app">
<table border="1" ref="table">
<thead>
<tr>
<th>First Name</th>
<th>Last Name</th>
</tr>
</thead>
<tbody>
<tr>
<td>John</td>
<td>Doe</td>
</tr>
<tr>
<td>John</td>
<td>Doe</td>
</tr>
</tbody>
</table>
</div>
<script>
new Vue({
el: "#app",
data: {},
mounted() {
let resizable = ColumnResizer.default
new resizable(this.$refs.table, {
liveDrag:true,
draggingClass:"rangeDrag",
gripInnerHtml:"<div class='rangeGrip'></div>",
minWidth:8
})
}
})
</script>
答案 2 :(得分:1)
像这样向您的组件添加mounted
方法:
mounted: function () {
var thElm;
var startOffset;
Array.prototype.forEach.call(
document.querySelectorAll("table th"),
function (th) {
th.style.position = 'relative';
var grip = document.createElement('div');
grip.innerHTML = " ";
grip.style.top = 0;
grip.style.right = 0;
grip.style.bottom = 0;
grip.style.width = '5px';
grip.style.position = 'absolute';
grip.style.cursor = 'col-resize';
grip.addEventListener('mousedown', function (e) {
thElm = th;
startOffset = th.offsetWidth - e.pageX;
});
th.appendChild(grip);
});
document.addEventListener('mousemove', function (e) {
if (thElm) {
thElm.style.width = startOffset + e.pageX + 'px';
}
});
document.addEventListener('mouseup', function () {
thElm = undefined;
});
}