【问题标题】:Importing external js library in Vue.js Single File Component在 Vue.js 单文件组件中导入外部 js 库
【发布时间】:2017-11-08 23:30:15
【问题描述】:

我在 Vue.js 中有以下单个文件组件。

plasmid 标签原本是由 angularplasmid.complete.min.js 文件呈现的,但出于某种原因并非如此。这是在组件中导入库的正确方法吗?

我正在重组一个旧的 Vue 项目以进行更好的设计,但我知道 plasmid 标记在此处呈现(不使用单个文件组件):https://github.com/asselinpaul/dnaviewer/blob/master/app/index.html

非常感谢任何帮助。

<template>
<div id="DNA Plasmid">
    <h3>Plasmid Visualisation</h3>
    <div class="section">
        <plasmid id='p1' plasmidheight="800" plasmidwidth="800" v-bind:sequencelength="sequenceLength">
            <plasmidtrack id='t1' radius="200" width="55">
                <trackmarker v-for="(bound, index) in bounds" class='marker' v-bind:start="bound.start" v-bind:end="bound.end" v-bind:style="{ fill: bound.color }" v-bind:key="bound.start">
                    <markerlabel v-bind:text="bound.name" v-bind:vadjust='bound.vadjust' style='font-size:12px'></markerlabel>
                </trackmarker>
                <tracklabel v-bind:text="name" style='font-size:25px;font-weight:bold'></tracklabel>
            </plasmidtrack>
        </plasmid>
    </div>
</div>

</template>

<script>
import './angularplasmid.complete.min.js'

...

【问题讨论】:

  • 这看起来像一个 Angular 库,我希望您将它与 Vue 结合起来会遇到问题,因为 Angular 和 Vue 都会在模板上发生争执。
  • @BertEvans 我告诉 Vue 忽略与角度位有关的模板 Vue.config.ignoredElements = ['plasmid', 'plasmidtrack', 'trackscale', 'trackmarker', 'tracklabel', 'markerlabel' ]
  • 当然,但是由于这是一个组件,因此当 Angular 初始化时,页面上可能不存在 HTML。
  • @BertEvans 我不知道我是使用 Angular 还是仅使用可视化代码(来自这里:angularplasmid.vixis.com/usage-basic.php),因为代码的角度部分(操作 dom 中的字段)由Vue.js。第一个答案的评论中有一个示例,说明它是如何使用不同结构的 Vue.js 程序工作的。
  • 在Vue中使用单个文件组件(或任何组件),模板不会立即呈现到页面,它发生在页面加载之后。在您的预组件化示例中,无论您导入的脚本做什么,HTML 在页面加载时都可用。但是,对于该组件,HTML 在 页面加载后 之前不可用,我怀疑您导入的脚本是否正在监视页面的更改以了解何时需要呈现图表。所以你需要一些东西来初始化导入的脚本组件渲染之后。

标签: vue.js vuejs2 vue-component


【解决方案1】:

你绝对不能合理地将角度函数与 Vue 结合起来。另外,角度使用its own dependency system

此外,您可以在单个文件组件中使用与在任何脚本中完全相同的方式导入。但当然要确保您导入的脚本实际上是在导出某些内容(或者与作为模块执行相关,这可能不是这里的情况)。

这里是语法提示:

import defaultMember from "module-name";
import * as name from "module-name";
import { member } from "module-name";
import { member as alias } from "module-name";
import { member1 , member2 } from "module-name";
import { member1 , member2 as alias2 , [...] } from "module-name";
import defaultMember, { member [ , [...] ] } from "module-name";
import defaultMember, * as name from "module-name";
import "module-name";

来源:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/import

请注意,commonJS require()module.exports 在单文件组件中也非常好。

【讨论】:

【解决方案2】:

通过在我的组件安装时需要文件来解决:

mounted: function(){
    require('./angularplasmid.complete.min.js')
  }

【讨论】:

  • 我很高兴这能奏效,但我想知道当/如果重新渲染组件时是否会出现问题(如果有的话)。
  • 有趣,目前还没有,但我明白为什么它可能会失败。
猜你喜欢
  • 1970-01-01
  • 2021-06-16
  • 2018-06-17
  • 2019-05-19
  • 2021-10-16
  • 1970-01-01
  • 1970-01-01
  • 2019-10-29
  • 2016-09-02
相关资源
最近更新 更多