ng-container
jest wspomniany w dokumentacji Angulara 2, ale nie ma wyjaśnienia, jak to działa i jakie są przypadki użycia.
Jest to szczególnie wspomniane w ngPlural
ingSwitch
dyrektywach .
Robi <ng-container>
robi to samo co <template>
, czy też zależy to od tego, czy napisano dyrektywę, aby użyć jednego z nich?
Są
<ng-container *ngPluralCase="'=0'">there is nothing</ng-container>
i
<template [ngPluralCase]="'=0'">there is nothing</template>
powinien być taki sam?
Jak wybieramy jedną z nich?
Jak można <ng-container>
używać w dyrektywie niestandardowej?
źródło
<template>
gdy jest używany bez dyrektyw. w tym przypadku<template>
będzie produkować<!--template bindings={}-->
.<template></template>
wyprodukuje<script></script>
zobacz to<script>
podczas kompilacji, jest później usuwany, w DOM nie ma żadnych dodatkowych tagów. Uważam, że podręcznik zawiera przestarzałe informacje lub po prostu zawiera błędy. W każdym razie dziękuję za wskazanie głównej różnicy między <ng-container> a <template>.<script></script>
. Renderował coś takiego<!--template bindings={}-->
od dłuższego czasu. Dokumenty zostaną wkrótce naprawione.Dokumentacja ( https://angular.io/guide/template-syntax#!#star-template ) podaje następujący przykład. Powiedzmy, że mamy taki kod szablonu:
Zanim zostanie wyrenderowany, zostanie „pozbawiony cukru”. Oznacza to, że notacja asterix zostanie przepisana na notację:
Jeśli „currentHero” jest prawdziwe, zostanie to renderowane jako
Ale co, jeśli chcesz otrzymać warunkowe wyjście w ten sposób:
.. i nie chcesz, aby wynik był opakowany w kontener.
Możesz napisać wersję pozbawioną cukru bezpośrednio w następujący sposób:
I to będzie działać dobrze. Jednak teraz ngIf musi mieć nawiasy [] zamiast gwiazdki *, a to jest mylące ( https://github.com/angular/angular.io/issues/2303 )
Z tego powodu powstała inna notacja, jak na przykład:
Obie wersje dadzą te same wyniki (renderowane będą tylko znaczniki h1 i p). Drugi jest preferowany, ponieważ możesz używać * ngIf jak zawsze.
źródło
ng-container
pojawił się pomysł dyrektywy , dzięki :)Przypadki użycia Imo
ng-container
to proste zamienniki, dla których niestandardowy szablon / komponent byłby przesadą. W dokumencie API wspominają o następujących kwestiachi myślę, że o to właśnie chodzi: grupowanie rzeczy.
Należy pamiętać, że
ng-container
dyrektywa odpada zamiast szablonu, w którym jej dyrektywa otacza rzeczywistą zawartość.źródło
Przypadek użycia, gdy chcesz użyć tabeli z * ngIf i * ngFor - As wstawienie div w td / th spowoduje, że element tabeli będzie źle się zachowywał -. Zmierzyłem się z tym problemem i to była odpowiedź.
źródło
<template [ngIf]...>
. Pytanie dotyczyło różnicy między tymi dwoma podejściami.