我正在尝试为gridstack制作可重用的组件。
我找不到一种简单的方法来做类似于vue 1this.$compile
中的方法的事情。我见过这个例子。
这是我的Vue脚本:
export default {
components: {
'horizontal-fab': HorizontalFab,
'd-widget': DWidget
},
data () {
return {
}
},
mounted () {
var options = {
cellHeight: 80,
verticalMargin: 10,
width: 3
}
$('#grid-stack').gridstack(options)
},
addWid () {
var grid = $('#grid-stack').data('gridstack')
grid.addWidget('<d-widget></d-widget>', 0, 0, 1, 1, true)
},
addGraph () {
var grid = $('#grid-stack').data('gridstack')
grid.addWidget(`
<div class="grid-stack-item" data-gs-width="4">
<div class="grid-stack-item-content">
<p>HTML (added)</p>
</div>
</div>
`, 0, 0, 1, 1, true)
}
这是相关的html:
<span @click="addGraph" >Line graph</span></li>
<span @click="addWid">Sparklines</span></li>
...
<div id="grid-stack" class="grid-stack grid-stack-3">
<d-widget data-gs-x="0" data-gs-y="0" data-gs-width="1" data-gs-height="1"></d-widget>
</div>
问题是:
该方法addGraph
完美地工作,当addWid
- 没有。即使直接作为组件插入到 html 中,它也可以工作。
我猜这是因为组件中的 html 没有被预编译。它compile
在 vue1 中解决了。
我已经尝试过的:
Mount
,正如这里所建议的那样,但它不起作用,因为它看不到已定义的组件,我猜push
正如这里所建议的那样,我已经看到有可能使它与它一起工作。但是我的vue知识还没有那么强,我找不到让它以这种方式工作的方法,因为会有几种类型的块,并且它们都应该被gridstack视为相同的元素。此外,同一个组件可以在一块板上多次使用,但参数不同。- 我已经看到有一种方法来编译 a
standalone component
,就像这里,但看起来它是非常不推荐的,所以我正在寻找其他方法。 - 我也看过这些
render functions
,但又一次 - 不幸的是,我的技能应用它并不好。
所以,总结一下——我真的很感激关于这些方法的一些建议,或者可能是关于其他实现方式的建议。问题是我还应该依靠gridstack脚本,而不是简单地插入元素。
谢谢!
UPD:d-widget的定义:
这基本上是单个组件,在名为 Widget.vue 的单独文件中定义
<template>
<div class="grid-stack-item" data-gs-width="4">
<div class="grid-stack-item-content">
<p>Wiiidget! (added)</p>
</div>
</div>
</template>
<script>
export default {
data () {
return {
}
}
}
</script>