简体   繁体   English

在 VueJS 组件中导入使用 getElementById 的模块

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM