【问题标题】:Angular Show a chart when div is visibleAngular 在 div 可见时显示图表
【发布时间】:2019-04-30 13:52:35
【问题描述】:

我有一个任务列表,当我点击一个任务时,通过

<a (click)="showMission(mission);"...

我调用这个函数

showMission(mission) {
      this.scrollUp();
      this.mission = mission;
      if (this.showHideMission === false) {
            this.showHideMission = true;
      }

      this.showHideCreateMission = false;
      this.showHideEditMission = false;
  }

将这个div的状态更改为true

<div *ngIf="showHideMission" class="ng-hide m-portlet m-portlet--full-height ">

并允许我读取里面的数据。

我想在这个 div 中显示来自 amchart 的图表,然后我插入了

&lt;div id="chartdiv" style="width: 100%; height: 400px; background-color: #FFFFFF;" &gt;&lt;/div&gt;&lt;div *ngIf="showHideMission".. 里面

我创建了创建图表的函数

createTimelineChart(mission){
let chart = am4core.create("chartdiv", am4charts.XYChart);
...

}

我将函数 showMission 更改为:

showMission(mission) {
      this.scrollUp();
      this.mission = mission;
      if (this.showHideMission === false) {
            this.showHideMission = true;
      }

      this.showHideCreateMission = false;
      this.showHideEditMission = false;
      this.createTimelineChart(mission); <---ADDED THIS LINE
  }

然后,当我打开一个任务时,我得到了这个错误:

html container not found
core.js:1673 ERROR Error: html container not found
    at createChild (Instance.js:129)
    at Module.create (Instance.js:172)
    at MissionComponent.push../src/app/mission/mission.component.ts.MissionComponent.createTimelineChart (mission.component.ts:203)
    at Object.eval [as updateDirectives] (MissionComponent.ngfactory.js:8278)
    at Object.updateDirectives (core.js:10798)
    at checkAndUpdateView (core.js:10451)
    at callViewAction (core.js:10692)
    at execEmbeddedViewsAction (core.js:10655)
    at checkAndUpdateView (core.js:10452)
    at callViewAction (core.js:10692)

但是如果我打开第二个任务,它会显示图表而没有任何错误(因为 &lt;div id="chartdiv".. 已经显示),所以这里真正的问题是它首先找不到 div,虽然我'将showHideMission设置为true后调用函数创建图表

【问题讨论】:

  • 如果图表的创建是同步的,那么您可以在将showHideMission 变量设置为true之前调用函数this.createTimelineChart(mission)
  • 如果我在将 showHideMission 设置为 true 之前调用该函数,我会收到错误消息(因为它找不到 html 容器),我什至无法打开任务。问题是尽管我在将 div 设置为可见后调用该函数,但似乎不可见的 html 容器
  • @alessandrobuffoli 尝试使用隐藏/可见属性的 ngstyle 或 ngclass 代替 ngif

标签: angular function show


【解决方案1】:

我遇到了同样的问题,并为这些函数使用了箭头函数。它为我解决了 componentDidUpdate = () => {}

【讨论】:

  • 您也可以在打字稿中使用箭头函数,当您将箭头函数作为回调传递时,它会记住谁调用它/它在哪里/它被回调的上下文,所以基本上我的解决方案是获得一个知道箭头函数的上下文是上下文感知的
猜你喜欢
  • 2021-03-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-19
  • 2017-12-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多