Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angularjs 删除nvd3角度图表_Angularjs_Typescript_Nvd3.js - Fatal编程技术网

Angularjs 删除nvd3角度图表

Angularjs 删除nvd3角度图表,angularjs,typescript,nvd3.js,Angularjs,Typescript,Nvd3.js,我有一个指令,它基于绑定数据和元数据显示折线图或条形图。我使用nvd3显示这些图表,第一次显示效果很好。但是当元数据和图表类型发生变化时,我看到了这两种情况 这是我的链接功能: link: (scope: IReportChartScope, element: JQuery, attrs) => { currentElement = element; scope.$watch('diagramInfo', (newVal: IDiagramInformation, old

我有一个指令,它基于绑定数据和元数据显示折线图或条形图。我使用nvd3显示这些图表,第一次显示效果很好。但是当元数据和图表类型发生变化时,我看到了这两种情况

这是我的链接功能:

link: (scope: IReportChartScope, element: JQuery, attrs) => {
    currentElement = element;

    scope.$watch('diagramInfo', (newVal: IDiagramInformation, oldVal: IDiagramInformation, scp: IReportChartScope) => {
        if (innerElement) {
            d3.select('#' + scope.diagramId + ' svg').remove();
            innerElement.remove();
        }

        if (!newVal) {
            currentElement.html(loadingDataTemplate);
        } else {
            var request = <IPeriodDiagramDataRequest>diagramInfo.Request;

            if (request.Period.Id == DiagramAggregationPeriod.All) {
                currentElement.html(barChartTemplate);
            } else {
                currentElement.html(lineChartTemplate);
            }
            innerElement = $compile(currentElement.contents())(scope);
        }
    });
}
您可以看到,在开始时,我试图删除指令的内部元素,但不知何故它不起作用。以下是我的模板:

var loadingDataTemplate = '<h1>Loading...</h1>';
var lineChartTemplate = '<nvd3-line-chart id="{{diagramId}}" data="diagramInfo.Series" showxaxis="true" showyaxis="true" tooltips="true" interactive="true" ' +
    'showlegend="true" width="{{width}}" height="{{height}}" nodata="Es wurden keine Daten geladen." margin="{top: 30, right: 30, bottom:30, left: 90}">' +
    '<svg ng-style="{width: width + \'px\', height: height + \'px\'}"></svg></nvd3-line-chart>';
var barChartTemplate = '<nvd3-multi-bar-chart id="{{diagramId}}" data="diagramInfo.Series" showxaxis="true" showyaxis="true" tooltips="true" interactive="true" ' +
    'showlegend="true" width="{{width}}" height="{{height}}" nodata="Es wurden keine Daten geladen." margin="{top: 30, right: 30, bottom:30, left: 90}">' +
    '<svg ng-style="{width: width + \'px\', height: height + \'px\'}"></svg></nvd3-multi-bar-chart>';

我不想使用ng if或ng hide,因为该指令将具有更多的功能。有没有办法摆脱它?防止内存泄漏也很有趣。我发现并使用它作为灵感,但可能还不够。

好吧,我想AngularJS不是为了这样使用而构建的,而是我定义了一个相当大的模板文件,它由一个和多个组成


在我的指令中,我现在只定义我想在chartTemplate中使用的模板,一切都像一个符咒。虽然我不确定这是否会导致内存泄漏,但是让我们一次解决一个问题。

检查这个,它可能对你有帮助。谢谢,但是它不知怎么起作用了,我也试着追加,替换,…他们都在某个时候破产了。我最终得到了答案中描述的解决方案。