Moja otázka je jednoduchá, ale verte mi, snažil som sa ňou ovinúť hlavu celé hodiny.
Prostredníctvom selektora tried sa vytvorí inštancia.
@Component({
selector: ".mycomponent",
template: "<h1>hello!</h1>"
})
export class MyComponent{}
Povedzme, že materská komponenta vyzerá takto:
@Component({
...
template:
`
<div class="mycomponent"></div> <!-- rendered -->
<div [class]=""mycomponent""></div> <!-- not rendered -->
`
})
export class ParentComponent{}
Prečo je to, že druhá verzia nie je nikdytavené? Ako by som to mohol urobiť? Je to problém s detekciou zmien, alebo to jednoducho nemá fungovať týmto spôsobom? Hral som si so stratégiou detekcie zmien, ktorá nemala žiaden účinok. Tiež som narazil DynamicComponentLoader
, Dúfam, že to dokážem obísť.
Existuje nejaký spôsob, ako dynamicky načítať komponenty prostredníctvom selektorov bez prvkov?
odpovede:
3 pre odpoveď č. 1To by nemalo fungovať. Komponenty a smernice sa vzťahujú iba na staticky pridané značky, atribúty a triedy.
Ak chcete dynamicky pridávať / odoberať komponenty a použitie direktív DynamicComponentLoader alebo createComponent()
z ViewContainerRef
-1 pre odpoveď č. 2
Prečo to nefunguje, pretože keď používate [trieda], znamená to, že „trieda“ je attr nepriradený k triede „mycomponent“.