任何人使用vis.js与AngularJS?

时间:2014-04-23 18:36:39

标签: javascript angularjs angularjs-directive chap-links-library

我试图在AngularJS中使用vis.js。它工作正常,我建立了一个简单的指令...... 但我需要使用列出here列出的一些事件,但它们不会被解雇。

在此示例中,graph.on('select', ...)事件侦听器未被触发,我是如何做到这一点的?

以下是我正在做的事情:

    app.directive('visGraph', [function() {
        return {
            restrict: 'AE',
            scope: {
                data: '=data',
                options: '=options'
            },
            link: function(scope, element, attrs) {

                var container = element[0];

                var graph = null;
                    graph = new vis.Graph(container, scope.data, scope.options);


                scope.$watch(function() {
                    return scope.data; 
                }, function(value) {
                    graph = new vis.Graph(container, scope.data, scope.options);
                });

                graph.on('select', function (properties) {
                    console.info('select.properties.nodes', properties.nodes);
                    console.info('select.properties.edges', properties.edges);
                });

            }
        };
    }]);

任何人都可以提供帮助吗?

2 个答案:

答案 0 :(得分:2)

我刚刚解决了这个问题。在我的示例中,双击节点会重定向到节点详细信息。我刚刚将数据和选项传输到我的控制器。这段代码是从Coffeescript编译的,所以它不是最完美的JS:

angular.module("myApp.directives").directive("visGraph", function($timeout, $window) {
  return {
    restrict: "AE",
    link: function(scope, element, attrs) {
      var buildGraph;
      buildGraph = function(scope, element) {
        var container, graph;
        container = element[0];
        graph = null;
        graph = new vis.Graph(container, scope.data, scope.options);
        return graph.on('doubleClick', function(properties) {
          if (properties.nodes.length !== 0) {
            return $window.location = FRONTEND_URL + properties.nodes;
          }
        });
      };
      // Wait for data asynchronously with $resource in the controller
      scope.$watch('data', function(newval, oldval) {
        buildGraph(scope, element);
      }, true);
    }
  };
});

在您的控制器中,定义$scope.data$scope.options。 在您的标记中,您只需添加vis-graph

希望它有所帮助!

答案 1 :(得分:1)

我做了一些工作(简单)......所以,我刚刚将我的代码与我的代码混合在一起......我得到了这个工作,而无需将数据重定向到控制器。

基本上,我已经添加了告诉指令我想要在vis图上触发哪个事件的可能性以及用于从指令内部调用控制器函数的回调函数:

<div id="graph" vis-graph data="graph.data" options="graph.options" event="select" callback="callbackFunction(params)"></div>

我使用我的指令和一个简单的用法示例在GitHub上创建了一个repo

随意看看!