【问题标题】:How to declare javascript class instance in vue?如何在 vue 中声明 javascript 类实例?
【发布时间】:2019-05-08 16:43:06
【问题描述】:

我需要在我的 vue.js 中访问存储在 canvas.js 中的数据。为此,我必须在我的 vue.xml 中创建画布实例。但我对此有一些疑问。

我发现similar problem 是我的,但我没有找到答案,我也尝试过 require。 我也找了一些solution用ES6,但是我没用ES6,不过我也试过了,不行。

这是我在 Vue.js 中输入的内容

import Canvas from './canvas.js';

Canvas.js

export default class Canvas{
contructor(){
    this.devices = ["5", "15"];
}

我想知道为什么第一个解决方案对我没有帮助,因为我的问题非常相似。如果我用“//”评论 Vue.js 中的导入,一切正常。也许还有另一种不使用导入的解决方案,但我需要访问存储在 Canvas 中的数据。

P.s 请不要建议使用组件 bcs im 计划在 Canvas 的设备中存储另一个类实例,并且会有太多无用的组件(imho bcs im noob in vue)

UPD:我的问题是“导入”后代码无法编译,我有这个 .

但是如果我把“import”放在评论“//”中,情况就像

UPD2:完整的 Vue.js 文件

//import Canvas from './canvas.js';
  var app1 = new Vue({
     el: '#vue1',
     data: {
        arr2: [8, 7, 6, 5]
     },
     methods: {
        addArr1: function(num){
        this.arr2.push(num)
     }
   }
 });

canvas.js

export default class Canvas{
contructor(){
    this.devices = ["5", "15"];
}

我的 index.html

<div id="vue1">
    <ul v-for="ar in arr2">
        <li>{{ ar }}</li>
    </ul>
    <button v-on:click="addArr1(15)">CLICK</button>
</div>

【问题讨论】:

  • 你有什么问题?
  • 您如何尝试访问devices?因为使用当前的代码,你必须先创建一个Canvas 实例。
  • 抱歉没把问题说清楚,我更新了话题
  • 你是如何编译你的代码的?
  • import 尚未在浏览器环境中得到正式支持。转译意味着获取使用 importexport 的 ES6 模块(文件)并将它们转换为单个 bundle.js 文件。您似乎使用的是纯客户端 Vue,因此您不能像那样使用import。你可以做的是在你的 HTML 中添加一个&lt;script&gt; 并使用const Canvas = { devices: ["5", "15"] };,现在你的 Vue 脚本应该可以使用Canvas.devices了。

标签: javascript vue.js


【解决方案1】:

在浏览器中使用 ES 模块需要您使用不同的机制来加载脚本。本质上,您应该有一个加载的“入口点”,并且可以导入您需要运行的不同模块。此入口点应使用&lt;script type="module" src="whatever.js"&gt; 定义,注意type="module。你可以在这里阅读:MDN &lt;script&gt;

如果您不使用type="module",则不能使用import,除非您运行像webpack 这样的转译器。 Vue 有一个引导应用程序,可帮助您在此处设置一个利用 webpack 的 Vue 项目:vue-cli

您的应用程序实际上看起来像这样:

Canvas.js

export default class Canvas {
  contructor() {
    this.devices = ["5", "15"];
  }
}

我的酷脚本.js

import Vue from "https://unpkg.com/vuex@3.1.0/dist/vuex.esm.js";
import Canvas from "./Canvas.js";

var app1 = new Vue({
  el: '#vue1',
  data: {
    arr2: [8, 7, 6, 5]
  },
  methods: {
    addArr1: function(num) {
      this.arr2.push(num)
    }
  }
});

index.html

<script src="my-cool-script.js" type="module"></script>
<div id="app"></div>

如果你不使用type="module",你不能在没有转译的情况下使用import。您的项目基本上如下所示:

Canvas.js

class Canvas {
  contructor() {
    this.devices = ["5", "15"];
  }
}

我的酷脚本.js

var app1 = new Vue({
  el: '#vue1',
  data: {
    arr2: [8, 7, 6, 5]
  },
  methods: {
    addArr1: function(num) {
      this.arr2.push(num)
    }
  }
});

index.html

<script src="https://cdn.jsdelivr.net/npm/vue"></script>
<script src="Canvas.js"></script>
<script src="my-cool-script.js"></script>
<div id="app"></div>

【讨论】:

  • 我不使用 ES,如果它只是添加 import Vue from "unpkg.com/vuex@3.1.0/dist/vuex.esm.js";我做到了,并按照您的指示进行操作,但仍然无法正常工作
  • @Ordec 除非你使用type="module",否则你不能使用import,除非通过像webpack这样的编译器。您必须在 HTML 中明确包含这两个脚本并删除 import
  • 知道为什么,但是任何使用 import 的尝试都会导致无法编译下面的代码
  • 好的,我想知道我的代码是否可以工作,如果我要添加 ?我做到了,但它不起作用,或者我必须使用 webpack 来使我的代码正常工作(限制目标)。在我不使用 webpack 和 ES 的情况下,是否有机会访问 canvas?
猜你喜欢
  • 1970-01-01
  • 2018-03-08
  • 2012-01-12
  • 2013-10-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-04
  • 1970-01-01
相关资源
最近更新 更多