@ViewChild не работает в angular-google-charts с ошибкой "chart is undefined" - PullRequest
1 голос
/ 24 октября 2019

Я пытаюсь получить доступ к базовому ChartWrapper, используя инструкции, приведенные в https://github.com/FERNman/angular-google-charts#advanced, но не могу заставить его работать, так как я получаю сообщение об ошибке "Chart is undefined"

У меня естьпопытался заменить ngOnInit () другими хуками Angular Lifecycle ngAfterViewInit () и ngAfterContentInit (), но результат все тот же.

component.html

<google-chart #chart *ngIf="height"></google-chart>

component.ts

import { ViewChild } from '@angular/core';
import { GoogleChartComponent } from 'angular-google-charts'

@Component({
...
})
export class TimelineComponent implements OnInit {

  @ViewChild('chart', {static: true}) 
  chart: GoogleChartComponent

  ngOnInit() {
    this.someService.getHeight().subscribe((data: any) => {
      this.height = data
    })
  }

  ngAfterViewInit() {
    const wrapper = this.chart.wrapper
    console.log(wrapper)
  }
}

Я ожидаю увидеть базовый ChartWrapper, который я могу использовать в своем коде.

1 Ответ

0 голосов
/ 24 октября 2019

В большинстве случаев вы захотите использовать {static: false} в вашем ViewChild. Установка этого параметра гарантирует, что совпадения запросов, которые зависят от разрешения привязки (например, структурные директивы * ngIf и т. Д.), Будут найдены.

Поэтому ответ будет следующим:

  *@ViewChild('chart', {static: false})* 

static: false будет стандартным вариантом отката в Angular 9.

Опция {static: true} была введена для поддержки создания встроенных представлений на лету. Когда вы динамически создаете представление и хотите получить доступ к TemplateRef, вы не сможете сделать это в ngAfterViewInit, так как это приведет к ошибке ExpressionHasChangedAfterChecked. Установка статического флага в true создаст ваше представление в ngOnInit.

...