Угловой ngOnInit никогда не выполняется при создании компонента внутри ngFor - PullRequest
0 голосов
/ 14 марта 2019

Я столкнулся с загадкой. Я нахожусь в цикле ngFor, как в этом примере:

<div *ngFor="let rc of sortedKeys(ruleImplementations)">
    <vi-rule-contract [descriptor]="ruleDescriptors[rc]" [item]="action" [rc]="rc">
    </vi-rule-contract>
</div>

Только для одного из этих N созданных компонентов 'vi-rule-contract' (очень специфического) ngOnInit не будет вызываться только своими ngOnChanges с новыми значениями для (дескриптор, rc, item). Для всех остальных 'vi-rule-contract' будет вызываться ngOnInit, но никогда не будет ngOnChanges. Итак, вот мой вопрос:

Существует ли случай, когда ngOnInit для компонента никогда не будет вызываться только для его ngOnChanges?

PS угловой 6.1.10

1 Ответ

0 голосов
/ 14 марта 2019

Проблема в том, что у вас есть функция, определяющая ваш список, что означает, что ngFor постоянно повторяется, это очень плохая практика, angular пытается спасти вас, создавая только один раз компоненты, но изменяя входные данные.

Ваше исправление здесь состоит в том, чтобы прекратить использование функции в шаблоне и просто запустить ее при необходимости.

<div *ngFor="let rc of sortedRuleImplementations">
    <vi-rule-contract [descriptor]="ruleDescriptors[rc]" [item]="action" [rc]="rc">
    </vi-rule-contract>
</div>

this.sortedRuleImplementations = this.sortedKeys(ruleImplementations);

Я не могу сказать из вашего кода, когда изменяется ruleImplementations, но вы можете сделать это в заметной подписке или что-то в этом роде

...