Moje pytanie jest proste, ale wierzcie mi, próbuję owinąć głowę od wielu godzin.
Istnieje komponent, który należy utworzyć za pomocą selektora klasy.
@Component({
selector: ".mycomponent",
template: "<h1>hello!</h1>"
})
export class MyComponent{}
Powiedzmy, że element nadrzędny wygląda następująco:
@Component({
...
template:
`
<div class="mycomponent"></div> <!-- rendered -->
<div [class]=""mycomponent""></div> <!-- not rendered -->
`
})
export class ParentComponent{}
Dlaczego druga wersja nigdy nie jestrenderowane? Jak mam to zrobić? Czy to problem z wykrywaniem zmian, czy po prostu nie powinien działać w ten sposób? Grałem ze strategią wykrywania zmian, która nie przyniosła żadnego efektu. Też natknąłem się DynamicComponentLoader
. Mam nadzieję, że uda mi się z niego korzystać.
Czy istnieje sposób na dynamiczne ładowanie komponentów za pomocą selektorów nieelementowych?
Odpowiedzi:
3 dla odpowiedzi № 1To nie powinno działać. Komponenty i dyrektywy są stosowane tylko do statycznie dodanych tagów, atrybutów i klas.
Jeśli chcesz dynamicznie dodawać / usuwać komponenty i dyrektywy użyj DynamicComponentLoader lub createComponent()
z ViewContainerRef
-1 dla odpowiedzi № 2
Dlaczego to nie działa, ponieważ kiedy używasz [class], oznacza to, że „class” jest atrybutem, który nie przypisuje klasy „mycomponent” do div.