代码之家  ›  专栏  ›  技术社区  ›  Robdll

使用chartsJs时如何避免不可扩展对象上的TypeError

  •  4
  • Robdll  · 技术社区  · 7 年前

    我的项目中有一个问题 角度5 , NgRx 、材料设计引导和 图表 .

    基本上,在创建图表时,我会得到一个控制台消息列表,如下所示(无论如何,图表都会正确显示):

    试图在对象“17.94,17.47,17.14,17.17,18.21,17.91,18.34,20.25,21.39”上使用描述符“[object object]”配置“_chartjs”,但出现错误,放弃:TypeError:无法定义属性_chartjs,对象不可扩展-区域。js:2228

    试图在对象“17.94,17.47,17.14,17.17,18.21,17.91,18.34,20.25,21.39”上用描述符“{”configurable:true,“enumerable:false}”配置“push”,但出现错误,放弃:TypeError:无法定义属性push,对象不可扩展-zone。js:2228

    试图在对象“17.94,17.47,17.14,17.17,18.21,17.91,18.34,20.25,21.39”上用描述符“{”configurable:true,“enumerable:false}”配置“pop”,但出现错误,放弃:TypeError:无法定义属性pop,对象不可扩展-zone。js:2228

    经过短暂的调查后,我读了 doc 关于冻结对象,我在chartsJs node_module文件夹中找到了抛出这些消息的代码,但我真的不知道如何解决这个问题。

    以下是图表:

    <canvas mdbChart *ngIf="chartsData.length >= 1"
        [chartType]="chartType"
        [datasets]="chartsData" 
        [labels]="xLabels"
        [colors]="chartColors"
        [options]="chartOptions"
        [legend]="chartsData && chartsData.length >= 1"
        (chartHover)="chartHovered($event)" 
        (chartClick)="chartClicked($event)">
    </canvas>
    

    这是ts文件的一部分:

    @Input() chartData: Array<object>; 
    @Input() xLabel: Array<string>; 
    xLabels: Array<string>; 
    chartsData: Array<object>; 
    
    ngOnChanges(changes: SimpleChanges) {
        if( changes.xLabel && changes.xLabel.currentValue.length > 0 && changes.chartData && changes.chartData.currentValue.length > 0 ){
            this.chartsData = changes.chartData.currentValue.map(item => Object.assign({}, item));
            /** this workaround solves a mdb library bug  not updating xAxis label*/
            setTimeout(function () {
                this.xLabels = changes.xLabel.currentValue.slice(0);
            }.bind(this), 0);
        }
    }
    

    正如你在上面看到的,我试图克隆输入对象(它们都来自ngRx状态),但没有解决这个问题。

    我很乐意提供任何需要的信息。如果这不是一个可行的例子,我很抱歉,但是你可能知道,制作一个角度5的工作示例xD需要大量的文件

    0 回复  |  直到 7 年前