如何使用Angular使网络可视化在vis.js中工作?

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

我已经安装了我需要的依赖项: vis.js:npm install vis --save @ types / vis:npm install @types/vis --save-dev

代码段:

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

@Component({
  selector: 'test',
  template: '<div #network></div>'
})
export class TestComponent implements AfterViewInit {
  @ViewChild('network') el: ElementRef;
  private networkInstance: any;

  ngAfterViewInit() {
     const container = this.el.nativeElement;
     const nodes = new DataSet<any>([
        {id: 1, label: 'Node 1'},
        {id: 2, label: 'Node 2'},
        {id: 3, label: 'Node 3'},
        {id: 4, label: 'Node 4'},
        {id: 5, label: 'Node 5'}
    ]);

    const edges = new DataSet<any>([
        {from: 1, to: 3},
        {from: 1, to: 2},
        {from: 2, to: 4},
        {from: 2, to: 5}
    ]);
    const data = { nodes, edges };

    this.networkInstance = new Network(container, data);
  }
}

我试过上面尝试但是它给了我这个错误:

无法读取undefined的属性'solve'

我错过了什么?

angular vis.js
2个回答
2
投票

我在Angular项目中使用Vis.js网络模块时遇到了同样的问题。经过一番搜索,我发现问题是由Network对象的构造方式引起的。如果您替换此行:

this.networkInstance = new Network(container, data);

......用这一行:

this.networkInstance = new Network(container, data, {});

然后问题就解决了。

背景 Vis.js的Typescript类型定义在构造函数的定义中有错误,定义声称

构造函数的“options”参数是可选的:constructor(container: HTMLElement, data: Data, options?: Options);

但是如果你查看Vis.js代码,你会注意到传递一个未定义的选项属性会导致跳过重要的初始化代码,从而导致你遇到的错误。 相反,如果您传递一个空选项对象,则会正确初始化网络。


0
投票

尝试添加超时,如下所示:

ngAfterViewInit() {
     const nodes = new DataSet<any>([
        {id: 1, label: 'Node 1'},
        {id: 2, label: 'Node 2'},
        {id: 3, label: 'Node 3'},
        {id: 4, label: 'Node 4'},
        {id: 5, label: 'Node 5'}
    ]);

    const edges = new DataSet<any>([
        {from: 1, to: 3},
        {from: 1, to: 2},
        {from: 2, to: 4},
        {from: 2, to: 5}
    ]);
    setTimeout(() => {
        const data = { nodes, edges };
        const container = this.el.nativeElement;
        this.networkInstance = new Network(container, data);
    }, 0);
}

我有一个类似的问题,我认为这与我试图在选项卡中显示图表的事实有关,我必须像这样将它添加到事件队列中,所以它在所有其他调用之后执行当前的调用堆栈。我希望这有帮助。

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