4

我正在尝试将vis.js与 AngularJS 一起使用。它工作正常,我构建了一个简单的指令......但我需要使用此处列出的一些事件,但它们没有被触发。

在这个例子中,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);
                });

            }
        };
    }]);

任何人都可以帮忙吗?

4

2 回答 2

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.

希望能帮助到你!

于 2014-04-25T09:35:34.007 回答
1

我对此做了一些工作(简单)...所以,我刚刚将您的代码与我的代码混合在一起...并且无需将数据重定向到控制器即可完成此工作。

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

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

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

随意看看!

于 2014-04-29T09:55:39.217 回答