我是初学者,这可能比 vue 更像是一个 JavaScript 问题,但无论如何:
有一个名为handcontainable的电子表格插件,在正常使用中,您可以通过这样做来创建表格
hot = new Handsontable(container, {option})
然后可以使用hot.loadData()等方法。。
要在vuejs中使用handcontainable,我们可以在这里找到一个包装器https://github.com/handsontable/vue-handsontable-official.使用包装器,可以制作如下表:
<template>
<div id="hot-preview">
<HotTable :root="root" :settings="hotSettings"></HotTable>
</div>
</template>
<script>
import HotTable from 'vue-handsontable-official';
import Vue from 'vue';
export default {
data: function() {
return {
root: 'test-hot',
hotSettings: {
data: [['sample', 'data']],
colHeaders: true
}
};
},
components: {
HotTable
}
mounted () {
localforage.config({
driver: localforage.INDEXEDDB,
name: 'matchlist-database'
})
localforage.getItem('DB').then(function (value) {
console.log('then i fetch the DB: ' + JSON.stringify(value))
if (value !== 'null') {
console.log('dB contain something')
**root**.loadData(value)
}
</script>
因此,当我给出一个数组时,它可以正常工作,但是要从数据库加载数据,您必须调用handsontable方法hot.loadData(data)。
我找不到如何在 vuejs 中调用此方法,我总是收到错误类型错误:root.loadData 不是一个函数
我尝试了我能想到的一切,而不是root ex:HotTable.loadData(value)
但无济于事
有人能指出我将如何从vuejs包装器调用可处理的方法吗?或者指出我应该做什么样的阅读来理解我的错误。非常感谢。
这里有两个问题,不错:)
第一个问题:
如果你想在 Vue 的方法/计算属性/观察者/生命周期事件中引用你的数据,你应该使用 this 关键字。如果你有 data: function() { return { root: “root-value” }} 并且你想控制台.log那个“root-value”字符串,你应该在挂载的处理程序中编写 console.log(this.root)。
如果您有以下内容:
data: function() {
return {
hot = new Handsontable(container, {option})
....
};
您可以像这样调用hot.loadData():
mounted() {
this.hot.loadData();
...
}
所以这指的是暴露你的数据属性的Vue实例。
第二个问题:
如果我对组件包装理解正确的话,你应该把数据作为道具传递给它,而不是直接调用任何可手动操作的方法。
<HotTable :root="root" :settings="hotSettings"></HotTable>
这意味着Vue将数据中作为根目录的任何内容传递给HotTable组件。它还传递数据中的任何设置。在示例中,HotTable接收以下内容:
root: 'test-hot',
hotSettings: {
data: [['sample', 'data']],
colHeaders: true
}
现在,如果您想更改/更新/修改/添加应该传递给HotTable组件的数据,那么应该更新Vue实例中的数据。你应该做一些类似this.hotSettings=新的东西,this.root=其他东西,HotTable组件将接收这些东西。
要了解HotTable的真正特点,请阅读所有组件文档。真正地如果您通读文档,将节省大量时间。之后一切都变得有意义了!https://v2.vuejs.org/v2/guide/components.html