Если вы не хотите нарушать принцип DRY, как предлагает falsetru, вам нужно будет использовать метаклассы. Я думал писать что-то, но уже есть хорошее длинное описание метаклассов на SO , поэтому проверьте его.
Метаклассы, короче говоря, позволяют управлять созданием подкласса.
В основном, что вам нужно сделать, после создания подкласса Parent
добавьте член _id
в вновь созданный подкласс.
После назначения this.reportData
вы хотите дать Angular шанс обновить DOM, прежде чем начинать запрашивать дочерние узлы.
Вы можете позвонить ChangeDetectorRef.detectChanges()
, чтобы запустить прогон обнаружения изменений, прежде чем запрашивать обновленный DOM:
constructor(private cd: ChangeDetectorRef, private sanitizer: DomSanitizer) {}
// ...
this.reportData = this.sanitizer.bypassSecurityTrustHtml(html);
// Update the DOM
this.cd.detectChanges();
// Now we can access the updated DOM
console.log(this.reportDisplayHost.nativeElement.querySelector('chart'));
А вот пример StackBlitz .