visjs时间线在角度重新加载后消失

问题描述:

我已将visjs时间线包裹到角度指令中。当我在外部控制器中调用$ route.reload()时,时间线消失。页面重新加载完成后,该指令仍然具有对原始时间轴对象的引用,并且dom元素看起来不会改变。visjs时间线在角度重新加载后消失

有谁知道什么可能导致它消失?

我已经创建了一个plunkr,但我不知道如何重新加载一个plunker里面的路由,因为这会改变url。

http://plnkr.co/edit/hwShQ2iYR7TOcILSBcEY?p=preview

function timelineViewer() { 

    var timeline; 
    return { 
    restrict: 'E', 
    replace: true, 
    scope: { 
     data: '=' 
    }, 
    controller: function($scope) { 
     var items = new vis.DataSet(); 
     var container = document.getElementById('vis-timeline'); 

     var options = { 
     height: 100, 
     width: 600, 
     zoomMin: 1000 * 60 * 2, 
     zoomMax: 1000 * 60 * 20 
     }; 

     items.clear(); 
     items.add($scope.data); 

     timeline = new vis.Timeline(container, items, options); 

     console.log('Reloading directive ...') 
    }, 
    template: '<div id="vis-timeline"></div>' 
    }; 
} 

要重新加载路线需要设置为控制器的路线,看到这个fork您plunker的。 这似乎与实施指导工作得很好,那么我不知道原因,后来我加了一些变化预期,以解决这个问题

在解释plunker:

controller: function($scope, $element) { 
    var items = new vis.DataSet(); 
    var container = $element[0]; 

角的指令已经到自身的DOM元素($element)的基准,所以它可以安全地使用,而不是得到它的通过document.getElementById

$scope.$on('$destroy', function() { 
    console.log('Destroying directive ...') 
    timeline.destroy(); 
}); 

此线确保破坏时间轴瓦特如果该指令被破坏,则时间线具有用于清除受影响的DOM元素的方法destroy()