安装@ type / vis和vis后定义DataView时发生冲突

问题描述 投票:0回答:1

js和angular可以在我的网页上显示一些图形。我安装了

npm install vis 
npm install @type/vis

但我发现两者都有一个称为DataView的函数。我想使用vis的DataView,但是似乎自动找到@ type / vis的DataView。

我的代码是这样的:


import { Component, AfterViewInit, ElementRef, ViewChild } from '@angular/core';
import { Network, DataSet, DataView} from 'vis';

@Component({
  selector: 'app-test',
  templateUrl: './test.component.html',
  styleUrls: ['./test.component.scss']

})
export class TestComponent implements AfterViewInit {
  @ViewChild('network', {static: false}) el: ElementRef;
  @ViewChild('nodeFilterSelect', {static:false}) nodeFilter: ElementRef;
  @ViewChild('edgesFilter', {static: false}) edgeFilter: ElementRef;
  private networkInstance: any;

  ngAfterViewInit() {
    const nodes_set = new DataSet<any>([
        { id: 1, label: 'Eric Cartman', age: 'kid', gender: 'male' },
        { id: 2, label: 'Stan Marsh', age: 'kid', gender: 'male' },
        { id: 3, label: 'Wendy Testaburger', age: 'kid', gender: 'female' },
        { id: 4, label: 'Mr Mackey', age: 'adult', gender: 'male' },
        { id: 5, label: 'Sharon Marsh', age: 'adult', gender: 'female' }
    ]);

    const edges_set = new DataSet<any>([
        { from: 1, to: 2, relation: 'friend', arrows: 'to, from', color: { color: 'red'} },
        { from: 1, to: 3, relation: 'friend', arrows: 'to, from', color: { color: 'red'} },
        { from: 2, to: 3, relation: 'friend', arrows: 'to, from', color: { color: 'red'} },
        { from: 5, to: 2, relation: 'parent', arrows: 'to', color: { color: 'green'} },
        { from: 4, to: 1, relation: 'teacher', arrows: 'to', color: { color: 'blue'} },
        { from: 4, to: 2, relation: 'teacher', arrows: 'to', color: { color: 'blue'} },
        { from: 4, to: 3, relation: 'teacher', arrows: 'to', color: { color: 'blue'} },
    ]);


    const nodesView = new DataView(nodes_set, {})
    const edgesView = new DataView(edges_set, {})



    const container = this.el.nativeElement;


     const data = { nodes: nodes_set, edges: edges_set };
 [![enter image description here][1]][1]
     this.networkInstance = new Network(container, data, {});

  }
}

您可以看到我从vis导入了DataView,但是我们将光标放在DataView上,如下所示:

enter image description here

并且@ type / vis中的DataView是:

export class DataView<T extends DataItem | DataGroup> {
  length: number;
  constructor(items: T[]);
}


因此,即使我从vis导入它,似乎也可以找到@ type / vis的DataView。如何解决这个问题?

angular vis.js
1个回答
1
投票

这就是类型的工作方式。他们确保您输入正确的代码。 @types中的包为vis包添加了类型提示,该提示不提供自己的类型。要解决您的错误,您需要传递一个数组,而不是对象:

const nodesView = new DataView(nodes_set);
const edgesView = new DataView(edges_set);

我已经对其进行了更深入的研究,并意识到不建议使用包vis,并且不再对其进行维护。同样,不应再使用@types/vis,因为新项目vis.js提供了自己的类型。因此,为您着急,您需要做:

vis.js

然后您将对包装进行正确的键入。例如,npm r vis @types/vis npm i vis-data 构造函数具有以下键入:

DataView

因此您可以使代码保持相同:

constructor(data: DataInterface<Item, IdProp>, options?: DataViewOptions<Item, IdProp>);

第二个参数为const nodesView = new DataView(nodes_set, {}); const edgesView = new DataView(edges_set, {}); ,并带有以下键入:

DataViewOptions

作为一个旁注,我看到您使用的是角形,vis包也有自己的角形包装。如果适合您的项目,也许可以看看它:export interface DataViewOptions<Item, IdProp extends string> { fieldId?: IdProp; filter?: (item: Item) => boolean; }

© www.soinside.com 2019 - 2024. All rights reserved.