Изменение обнаружения не срабатывает даже после вызова detectChanges - PullRequest
0 голосов
/ 02 мая 2020

В настоящее время я работаю над проектом angular 9, и у меня возникла небольшая проблема с обнаружением изменений.

ParentComponent.ts

_themeableElements: QueryList<ThemeableDirective> = new QueryList<ThemeableDirective>();

  get themeableElements() {
    return this._themeableElements;
  }

  @ViewChildren(ThemeableDirective) set themeableElements(elements) {
    console.log(elements);
    this._themeableElements = elements;
  }

ngAfterViewInit() {
    this.themeableElements.changes.subscribe((changes: QueryList<ThemeableDirective>) => {
      this.onThemeableElementsChanged(changes.toArray());
    });

    this.onThemeableElementsChanged();
  }

Directive.ts (ThemeableDirective)

@Input()
  themeSelectorConfig: ThemeSelectorConfig;

  constructor(private logger: NGXLogger,
              public elementRef: ElementRef,
              public change: ChangeDetectorRef) {
    this.logger.debug('ThemeableDirective: constructed.');
  }

  ngOnInit(): void {
    this.themeSelectorConfig = HelperFunctions.Clone(new ThemeSelectorConfig(this.themeSelectorConfig));
  }

  ngOnChanges(changes: SimpleChanges) {
    if (changes.themeSelectorConfig) {
      this.themeSelectorConfig = HelperFunctions.Clone(new ThemeSelectorConfig(this.themeSelectorConfig));
this.change.detectChanges()
    }
  }

каким-либо образом, всякий раз, когда я изменяю свойство ввода в моей директиве (и вызываю detectChanges), родительский компонент вообще не обновляется. Я знаю, что changedetection не проводит глубокое сравнение массивов, поэтому я использую функцию clone.

Может кто-нибудь, возможно, укажет мне правильное направление, почему обнаружение изменений на родителе не работает? Глупо то, что это работает, когда я изменяю размер окна. Он обновляет все, но не сразу, когда изменяется свойство в директиве.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...