[英]Importing module that uses getElementById in VueJS component
I am trying to import Blockly (via node-blockly from npm) into a VueJS component, but the javascript part of Blockly contains getElementById() calls, which causes an error as document.getElementById() is not available in VueJS.我正在尝试将 Blockly(通过 npm 的 node-blockly)导入 VueJS 组件,但是 Blockly 的 javascript 部分包含 getElementById() 调用,这会导致错误,因为document.getElementById()在 VueJS 中不可用。
Any idea how to get around this?知道如何解决这个问题吗?
(Edit) Code Example: (编辑)代码示例:
<template>
<div class="hello">
<div id="blocklyDiv" style="height: 480px; width: 600px;">
</div>
<xml id="toolbox" ref=toolbox style="display: none">
<block type="controls_if"></block>
<block type="text"></block> <block type="text_print"></block>
</xml>
</div>
</template>
<script>
import Blockly from "node-blockly"
export default { name: 'hello' }
var workspace = Blockly.inject('blocklyDiv', {toolbox: document.getElementById('toolbox')});
</script>
I supose is v2.我想是v2。
Try in mounted event在已安装的事件中尝试
<template> <div class="hello"> <div id="blocklyDiv" style="height: 480px; width: 600px;"> </div> <xml id="toolbox" ref=toolbox style="display: none"> <block type="controls_if"></block> <block type="text"></block> <block type="text_print"></block> </xml> </div> </template> <script> import Blockly from "node-blockly" export default { name: 'hello', data(){ return { workspace: null } }, mounted(){ this.workspace = Blockly.inject('blocklyDiv', {toolbox: document.getElementById('toolbox')}); } } </script>
Assuming you are using VueJS version 2, you can access the reference to an element using this.$refs.myElement
after tagging your element in the template.假设您使用的是 VueJS 版本 2,您可以在模板中标记您的元素后使用this.$refs.myElement
访问对元素的引用。
Example:例子:
<div ref="blocklyDiv" style="height: 480px; width: 600px;">
mounted () {
this.workspace = Blockly.inject(this.$refs.blocklyDiv);
}
Then, just do the same for your toolbox.然后,对你的工具箱做同样的事情。
This works for me这对我有用
<script>
export default {
mounted() {
console.log('blockly');
var workspace = Blockly.inject('blocklyDiv', {
toolbox: document.getElementById('toolbox')
});
var blocklyArea = document.getElementById('blocklyArea');
var blocklyDiv = document.getElementById('blocklyDiv');
var workspace = Blockly.inject(blocklyDiv, {
toolbox: document.getElementById('toolbox')
});
....
},
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.