Score %0 (0 correct0 incorrect84 unanswered)

Q1. Was ist der Zweck des ViewChild-Decorators in dieser Komponentenklasse?

@Component({
    ...
    template: '<p #bio></p>'
})
export class UserDetailsComponent {
    @ViewChild('bio') bio;
}
  • Es bietet Zugriff von innerhalb der Komponentenklasse auf das ElementRef-Objekt für das <p>-Tag, das die Vorlagenreferenzvariable "bio" in der Ansichtsvorlage der Komponente hat.
  • Es zeigt an, dass das <p>-Tag als Kind der übergeordneten Ansicht gerendert wird, die diese Komponente verwendet.
  • Es ermöglicht dem <p>-Tag in der Vorlage die Unterstützung der Inhaltsprojektion.
  • Es macht das <p>-Tag in der endgültigen Darstellung sichtbar. Wenn #bio in der Vorlage verwendet wurde und @ViewChild nicht in der Klasse verwendet wurde, würde Angular automatisch das <p>-Tag ausblenden, das #bio darauf hat.

DigitalOcean - Zugriff auf Komponenten über ViewChild

Q2. Welche Methode wird verwendet, um ein FormControl mit einem nativen DOM-Eingabeelement in reaktiven Formularen zu verknüpfen?

  • Fügen Sie den dem FormControl gegebenen Zeichenfolgennamen einem Attribut namens "controls" auf dem <form>-Element hinzu, um anzugeben, welche Felder es enthalten soll.
  • Verwenden Sie die eckige Klammersyntax um das Wertattribut auf dem DOM-Element und setzen Sie das gleich zu einer Instanz des FormControls.
  • Verwenden Sie die Direktive formControlName und setzen Sie den Wert gleich dem dem FormControl gegebenen Zeichenfolgennamen.
  • Verwenden Sie den dem FormControl gegebenen Zeichenfolgennamen als Wert für das DOM-Element-Id-Attribut.

Angular.io - Reaktive Formgruppen

Q3. Was ist der Unterschied zwischen paramMap und queryParamMap in der Klasse ActivatedRoute?

  • Der paramMap ist ein Objektliteral der Parameter im URL-Pfad einer Route. Die queryParamMap ist ein Observable dieser gleichen Parameter.
  • Der paramMap ist ein Observable, das die Parameterwerte enthält, die Teil des URL-Pfads einer Route sind. Die queryParamMap ist eine Methode, die ein Array von Schlüsseln entgegennimmt und dazu dient, spezifische Parameter im paramMap zu finden.
  • paramMap ist der veraltete Name aus Angular 3. Der neue Name lautet queryParamMap.
  • Beide sind Observables, die Werte aus dem angeforderten URL-String der Route enthalten. Der paramMap enthält die Parameterwerte, die im URL-Pfad sind, und der queryParamMap enthält die URL-Abfrageparameter.

StackOverflow

Q4. Basierend auf der folgenden Verwendung des Async-Pipe und unter der Annahme, dass das Feld "users" der Klasse ein Observable ist, wie viele Abonnements auf das Observable "users" werden gemacht?

<h2>Namen</h2>
<div *ngFor="let user of users | async">{{ user.name }}</div>
<h2>Alter</h2>
<div *ngFor="let user of users | async">{{ user.age }}</div>
<h2>Geschlechter</h2>
<div *ngFor="let user of users | async">{{ user.gender }}</div>
  • Keiner. Das async-Pipe abonniert nicht automatisch.
  • Keiner. Die Vorlagensyntax ist nicht korrekt.
  • Drei. Es gibt einen für jedes async-Pipe.
  • Einer. Das async-Pipe zwischenspeichert Observables intern nach Typ.

UltimateCourses

Q5. Wie können Sie den HttpClient verwenden, um eine POST-Anfrage an einen Endpunkt aus der addOrder-Funktion in diesem OrderService zu senden?

export class OrderService {
  constructor(private httpClient: HttpClient) {}

  addOrder(order: Order) {
    // Fehlende Zeile
  }
}
  • this.httpClient.url(this.orderUrl).post(order);
  • this.httpClient.send(this.orderUrl, order);
  • this.httpClient.post<Order>(this.orderUrl, order);
  • this.httpClient.post<Order>(this.orderUrl, order).subscribe();

Angular.io - Daten an den Server senden

Q6. Wofür wird die RouterModule.forRoot-Methode verwendet?

  • Registrierung aller Anbieter, die Sie in gerouteten Komponenten verwenden möchten.
  • Registrierung von Routendefinitionen auf der Ebene der Wurzanwendung.
  • Angabe, dass Angular Ihre Routen unterstützen soll, um erfolgreich zu sein.
  • Deklaration, dass Sie beabsichtigen, die Routing nur auf der Wurzelebene zu verwenden.

O'REILLY

Q7. Auf welche DOM-Elemente passt der Selector dieser Komponentenmetadaten?

@Component({
    selector: 'app-user-card',
    . . .
})
  • Jedes Element mit dem Attribut app-user-card, wie zum Beispiel <div app-user-card></div>.
  • Die erste Instanz von <app-user-card></app-user-card>.
  • Alle Instanzen von <app-user-card></app-user-card>.
  • Alle Instanzen von <user-card></user-card>.

Angular.io - Komponentenmetadaten

Q8. Was ist die korrekte Template-Syntax, um die eingebaute ngFor-Strukturdirektive zu verwenden, um eine Liste von ProduktNamen auszugeben?

  • %OPTION% A

    <ul>
      <li [ngFor]="let productName of productNames">{{ productName }}</li>
    </ul>
    
  • %OPTION% B

    <ul>
      <li ngFor="let productName of productNames">{{ productName }}</li>
    </ul>
    
  • %OPTION% C

    <ul>
      <li *ngFor="let productName of productNames">{{ productName }}</li>
    </ul>
    
  • %OPTION% D

    <ul>
      <? for productName in productNames { ?>
      <li>{{ productName }}</li>
      <? } ?>
    </ul>
    

Angular.io - Strukturelle Direktiven

Q9. Welche beiden Komponentendekorationsmetadaten-Eigenschaften werden verwendet, um CSS-Stile für eine Komponente einzurichten?

  • viewEncapsulation und viewEncapsulationFiles.
  • Es gibt nur eine und es ist die Eigenschaft namens css.
  • css und cssUrl.
  • styles und styleUrls.

Angular.io - Komponentenstile

Q10. Mit der folgenden Komponentenklasse, welche Template-Syntax würdest du im Template verwenden, um den Wert des Titel-Klassenfelds anzuzeigen?

@Component({
  selector: 'app-title-card',
  template: '',
})
class TitleCardComponent {
  title = 'Benutzerdaten';
}
  • {{ 'Titel' }}
  • {{ Titel }}
  • [Titel]
  • Ein Klassenfeld kann nicht über die Template-Syntax in einem Template angezeigt werden.

Angular.io - String Interpolation oder Textinterpolation

Q11. Was ist der Zweck der valueChanges-Methode auf einem FormControl?

  • Sie wird verwendet, um zu konfigurieren, welche Werte für die Steuerung zugelassen sind.
  • Sie wird verwendet, um den Wert einer Steuerung auf einen neuen Wert zu ändern. Sie würden diese Methode aufrufen und den neuen Wert für das Formularfeld übergeben. Sie unterstützt sogar das Übergeben eines Arrays von Werten, die im Laufe der Zeit festgelegt werden können.
  • Sie gibt ein Boolesches Wert zurück, basierend darauf, ob der Wert der Steuerung vom Wert abweicht, mit dem er initialisiert wurde.
  • Es handelt sich um ein Observable, das jedes Mal emittiert wird, wenn sich der Wert der Steuerung ändert. Sie können also auf neue Werte reagieren und zu diesem Zeitpunkt logische Entscheidungen treffen.

Angular.io - Anzeigen eines Formularsteuerelementwerts

Q12. Welche Direktive wird verwendet, um ein <a>-Tag mit Routing zu verknüpfen?

  • routeTo
  • routerLink
  • routePath
  • appLink

Angular.io - RouterLink

Q13. Wofür wird der Output-Decorator in dieser Komponentenklasse verwendet?

@Component({
    selector: 'app-shopping-cart',
    . . .
})
export class ShoppingCartComponent {
    @Output() itemTotalChanged = new EventEmitter();
}
  • Es macht das itemTotalChanged Klassenfeld öffentlich.
  • Es bietet eine Möglichkeit, Werte an das itemTotalChanged Klassenfeld zu binden, wie folgt: <app-shopping-cart [itemTotalChanged]="newTotal"></app-shopping-cart>.
  • Es bietet eine Möglichkeit, Ereignisse an das itemTotalChanged Klassenfeld zu binden, wie folgt: <app-shopping-cart (itemTotalChanged)="logNewTotal($event)"></app-shopping-cart>.
  • Es ist einfach eine Möglichkeit, einen Kommentar vor einem Klassenfeld zur Dokumentation zu platzieren.

Angular.io - Daten an übergeordnete Komponente senden

Q14. Was ist der Unterschied zwischen diesen beiden Markup-Beispielen zur bedingten Anzeigesteuerung?

<div *ngIf="isVisible">Active</div>
<div [hidden]="!isVisible">Active</div>
  • Das ngIf ist eine Abkürzung für das andere Beispiel. Wenn Angular diese Direktive verarbeitet, schreibt es ein Div-Element mit der versteckten Eigenschaft in den DOM.
  • Sie sind grundsätzlich gleich.
  • Die ngIf-Direktive rendert das Div im DOM nicht, wenn der Ausdruck falsch ist. Die Verwendung der hidden-Eigenschaft verbirgt den Div-Inhalt im Browser-Viewport, aber das Div ist immer noch im DOM.
  • Das ngIf ist gültig, aber die Verwendung der hidden-Eigenschaft ist falsch und wird einen Fehler verursachen.

StackOverflow

Q15. Wie können Sie die Schaltfläche zum Absenden deaktivieren, wenn das Formular in diesem beispiel für template-gesteuerte Formulare Fehler aufweist?

<form #userForm="ngForm">
  <input type="text" ngModel name="firstName" required />
  <input type="text" ngModel name="lastName" required />
  <button (click)="submit(userForm.value)">Save</button>
</form>
  • %OPTION% A

    <button (click)="submit(userForm.value)" disable="userForm.invalid">Save</button>
    
  • %OPTION% B

    <button (click)="submit(userForm.value)" [disabled]="userForm.invalid">Save</button>
    
  • %OPTION% C

    <button (click)="submit(userForm.value)" [ngForm.disabled]="userForm.valid">Save</button>
    
  • %OPTION% D

    <button (click)="submit(userForm.value)" *ngIf="userForm.valid">Save</button>
    

Angular.io - Formular mit ngSubmit senden

Q16. Sie möchten sehen, welche Dateien durch das Erstellen einer neuen Kontaktkartenkomponente generiert würden. Welchen Befehl würden Sie verwenden?

  • ng generate component contact-card --dry-run
  • ng generate component contact-card --no-files
  • ng generate component component --dry
  • ng generate component --exclude

Angular.io - ng generate Optionen

Q17. Basierend auf der folgenden Komponente, welche Template-Syntax würden Sie verwenden, um das Feld titleText der TitleCardComponent mit der Eigenschaft title des h1-Elements zu verbinden?

@Component({
  selector: 'app-title-card',
  template: '<h1 title="User Data"> {{titleText}}</h1>',
})
export class TitleCardComponent {
  titleText = 'User Data';
}
  • <h1 data-title="titleText">{{ titleText }}</h1>
  • <h1 title="titleText">{{ titleText }}</h1>
  • <h1 [title]="titleText">{{ titleText }}</h1>
  • <h1 titleText>{{ titleText }}</h1>

Angular.io - String Interpolation

Q18. Was sind Angular Lifecycle-Hooks?

  • Protokollierer zur Verfolgung der Gesundheit einer Angular-App
  • Anbieter, die zur Verfolgung der Instanzen von Komponenten verwendet werden können
  • Eingebaute Pipes, die in Vorlagen für DOM-Ereignisse verwendet werden können
  • Reservierte benannte Methoden für Komponenten und Direktiven, die Angular während seiner Ausführung zu bestimmten Zeiten aufrufen wird und die genutzt werden können, um diese Lebenszyklus-Momente anzuzapfen

Angular.io - Lifecycle-Hooks

Q19. Wählen Sie die beste Beschreibung für diesen Template-Syntax-Code aus:

<span>Boss: {{job?.bossName}} </span>
  • Das ? ist eine Abkürzung für das Async Pipe. Der Wert job muss ein Observable sein.
  • Es verwendet den sicheren Navigationsoperator (?) für das job-Feld. Wenn das job-Feld undefiniert ist, wird der Zugriff auf bossName ignoriert und es tritt kein Fehler auf.
  • Im Template-Syntax gibt es einen Fehler. Das ? ist hier nicht gültig.
  • Es zeigt den Wert von job an, wenn er vorhanden ist; andernfalls wird bossName angezeigt.

StackOverflow

Q20. Wie würden Sie eine Routendefinition für eine UserDetailComponent konfigurieren, die den URL-Pfad user/23 unterstützt (wobei 23 die id des angeforderten Benutzers darstellt)?

  • { path: 'user/:id', component: UserDetailComponent }
  • { url: 'user/:id', routedComponent: UserDetailComponent }
  • { routedPath: 'user/:id', component: UserDetailComponent }
  • { destination: new UserDetailComponent(), route: 'user/:id' }

CodeCraft - Parameterisierte Routen

Q21. Was machen die HostListener-Dekorateure und der HostBinding-Dekorateur in dieser Direktive?

@Directive({
  selector: '[appCallout]',
})
export class CalloutDirective {
  @HostBinding('style.font-weight') fontWeight = 'normal';

  @HostListener('mouseenter')
  onMouseEnter() {
    this.fontWeight = 'bold';
  }

  @HostListener('mouseleave')
  onMouseLeave() {
    this.fontWeight = 'normal';
  }
}
  • Sie setzen das Feld CalloutDirective.fontWeight basierend darauf, ob die Maus über dem DOM-Element ist oder nicht. Der HostListener setzt dann die CSS-Eigenschaft font-weight auf den Wert fontWeight.
  • Sie richten die Direktive ein, um das DOM-Element zu überprüfen, auf dem sie sich befindet. Wenn für Maus-Eintritt und -Verlassen Ereignisbindungen hinzugefügt wurden, wird dieser Code verwendet. Andernfalls passiert nichts.
  • Dies ist eine falsche Verwendung von HostListener und HostBinding. Die Dekorateure HostListener und HostBinding tun nichts auf Direktiven; sie funktionieren nur, wenn sie auf Komponenten angewendet werden.
  • Wenn das DOM-Element, auf dem diese Direktive platziert ist, die CSS-Eigenschaft font-weight gesetzt hat, werden die Ereignisse mouseenter und mouseleave ausgelöst.

DigitalOcean

Q22. Welche Angular-Template-Syntax können Sie auf diesem template-gesteuerten Formularfeld verwenden, um auf den Feldwert zuzugreifen und die Validierung im Template-Markup zu überprüfen?

<input type="text" ngModel name="firstName" required minlength="4" />
<span *ngIf="">Invalid field data</span>
  • Sie können eine Template-Referenzvariable und die exportAs-Funktion verwenden, die die ngModel-Direktive hat.
  • Sie können die ngModel-Direktive in Kombination mit dem Feldnamen des Eingabefelds verwenden.
  • Sie können eine Template-Referenzvariable für das HTML-Eingabeelement verwenden und dann die Eigenschaft valid davon überprüfen.
  • Es ist nicht möglich, mit template-gesteuerten Formularen auf den Feldwert zuzugreifen. Dafür müssen Sie reaktive Formulare verwenden.
  1. Angular.io - Anzeigen und Ausblenden von Validierungsfehlermeldungen
  2. Medium

Q23. Welchen Werttyp wird die HeaderText-Template-Referenzvariable in diesem Markup speichern?

<h1 #headerText>User List</h1>
  • ein Angular-ElementRef, ein Wrapper um ein natives Element
  • der innere Text des <h1>-Elements
  • eine Kopfkomponentenklasse
  • der native DOM-Elementtyp von HTMLHeadingElement

Pluralsight - Template-Referenzvariable

Q24. Was ist der Unterschied, falls vorhanden, der resultierenden Code-Logik basierend auf diesen beiden Anbieterkonfigurationen?

[{ provide: FormattedLogger, useClass: Logger }][{ provide: FormattedLogger, useExisting: Logger }];
  • Sie sind gleich. Beide führen zu einer neuen Instanz von Logger, die an das FormattedLogger-Token gebunden ist.
  • Die Syntax useClass teilt dem Injector mit, eine neue Instanz von Logger zu erstellen und diese Instanz dem FormattedLogger-Token zuzuweisen. Die Verwendung der Syntax useExisting bezieht sich auf eine bereits vorhandene Objektinstanz, die als Logger deklariert ist.
  • Beide sind falsch. Ein starker Typ kann nicht für useClass oder useExisting verwendet werden.
  • Sie sind gleich. Beide führen dazu, dass das FormattedLogger-Token ein Alias für die Instanz von Logger ist.
  1. Angular.io - Dependency Providers
  2. TektutorialHub

Q25. Was ist der Zweck der data-Eigenschaft (wie im folgenden Beispiel gesehen) in einer Routenkonfiguration?

   {
       path: 'customers',
       component: CustomerListComponent,
       data: { accountSection: true }
   }
  • Eine Schlüssel-/Wertzuordnung zum Festlegen von @Input-Werten auf der instanzierten Komponente der gerouteten Komponente.
  • Eine Möglichkeit, statische, schreibgeschützte Daten einzuschließen, die mit der Route verbunden sind und aus ActivatedRoute abgerufen werden können.
  • Eigenschaft auf der Route, die verwendet werden kann, um dynamische Daten für die Route zu laden.
  • Ein Objekt, das automatisch in den Konstruktor der gerouteten Komponente injiziert wird.
  1. TektutorialsHub
  2. StackOverflow

Q26. Wie ändert die eingebaute ngIf-strukturelle Direktive die gerenderte DOM basierend auf dieser Template-Syntax?

@Component({
  selector: 'app-product',
  template: '<div *ngIf="product">{{ product.name }}</div>',
})
export class ProductComponent {
  @Input() product;
}
  • Das <div> dient als Platzhalter. Wenn das Produktklassenfeld "wahr" ist, wird das <div> durch den Wert von product.name ersetzt; wenn nicht, wird nichts gerendert.
  • Das <div> wird immer gerendert, und wenn das Produktfeld "wahr" ist, wird das <div>-Element den Wert von product.name enthalten; sonst wird es das <div>-Element ohne Wert rendern.
  • Es tritt ein Fehler auf, da ngIf keine eingebaute strukturelle Direktive ist.
  • Wenn das Produktklassenfeld "wahr" ist, wird die gerenderte DOM den <div> mit dem Wert des Feldes product.name enthalten. Wenn es nicht "wahr" ist, wird die gerenderte DOM das <div>-Element nicht enthalten.

Referenz (angular.io)

Q27. Was bewirkt dieser Code?

@NgModule({
  declarations: [AppComponent],
  imports: [BrowserModule],
  bootstrap: [AppComponent],
})
export class AppModule {}

platformBrowserDynamic().bootstrapModule(AppModule);
  • Es führt einen Unit-Test für ein NgModule aus.
  • Es bietet eine Möglichkeit, die Dokumentstruktur einer Angular-Anwendung zu codieren. Das @NgModule ist eine Form von Inline-Code-Kommentierung, die vom TypeScript-Compiler ignoriert wird, aber in Code-Editor-Anwendungen mit spezieller Formatierung angezeigt wird.
  • Es deklariert ein Angular-Modul namens AppModule und macht es im gesamten Anwendungscode für Lazy Loading verfügbar.
  • Es deklariert ein Angular-Modul namens AppModule, das eine bootstrapped-Komponente namens AppComponent enthält. Dann registriert es dieses Modul bei Angular, damit die App gestartet werden kann.

Angular.io - The basic NgModule

Q28. Welche Aussage beschreibt am besten, was die resolve-Eigenschaft in dieser Routenkonfiguration bewirkt?

{
   path: ':id',
   component: UserComponent,
   resolve: {
     user: UserResolverService
   }
}
  • Vor dem Laden des UserComponent abonniert der Router das von einer resolve-Methode im UserResolverService zurückgegebene Observable. Diese Technik kann verwendet werden, um vorgeladene Daten für eine Route zu erhalten.
  • Nachdem die Route gelöst ist und die Komponente geladen und gerendert wurde, wird der UserResolverService eine Methode namens user haben, die alle offenen Datenverbindungen bereinigt.
  • Es gibt einen Fehler. Der korrekte Eigenschaftsname ist onResolve.
  • Das UserComponent wird einen Parameter in seinem Konstruktor für user haben, und der Router wird sich um das Einbringen eines Werts dafür aus einem Aufruf einer user-Methode im UserResolverService kümmern.

angular.io

Q29. Was ist der Zweck des ContentChildren-Dekorators in dieser Komponentenklasse?

@Component({
 . . .
 template: '<ng-content></ng-content>'
})
export class TabsListComponent {
 @ContentChildren(TabComponent) tabs;
}
  • Wenn Elemente TabsComponent zur Vorlage von TabsListComponent hinzugefügt werden, werden sie zur Laufzeit in das <ng-content>-Element eingefügt.
  • Es erstellt TabComponent-Komponenten in der TabsListComponent-Vorlage, wenn ein TabsListComponent instanziiert wird.
  • Es ermöglicht den Zugriff von innerhalb der Komponentenklasse auf alle TabComponent-Komponenten, die in das <ng-content> für diese Komponente projiziert wurden.
  • Es beschränkt die zulässigen Elemente, die in ein TabsListComponent-Element eingefügt werden können, um nur TabComponent-Elemente zuzulassen.

betterprogramming.pub

Q30. Damit Angular Komponenten in einer Anwendung verarbeiten kann, wo müssen die Komponententypen registriert sein?

  • innerhalb eines Skripttags in der index.html-Datei
  • in einem NgModule-Dekoratormetadatentag mit dem Namen components
  • Keine Registrierung erforderlich, einfach die Komponentendateien in einem App-Verzeichnis einschließen.
  • in einer NgModule-Dekoratormetadateneigenschaft mit dem Namen declarations

angular.io

Q31. Was ist der Zweck des Aufrufs fixture.detectChanges() in diesem Unittest?

TestBed.configureTestingModule({
  declarations: [UserCardComponent],
});
let fixture = TestBed.createComponent(UserCardComponent);

fixture.detectChanges();

expect(fixture.nativeElement.querySelector('h1').textContent).toContain(
  fixture.componentInstance.title,
);
  • Es verfolgt etwaige Änderungen an der UI und der Unittest schlägt fehl, wenn Änderungen vorgenommen wurden.
  • Es wird verwendet, um die Stabilität des Komponentenvorlagen über mehrere Unittests im gesamten Testpaket sicherzustellen.
  • Es zwingt Angular dazu, die Änderungserkennung durchzuführen, was dazu führt, dass das UserCardComponent gerendert wird, bevor Sie seine Vorlage überprüfen können.
  • Es wird verwendet, um Änderungserkennungsereignisse während der Ausführung von Unittests in der Konsole zu protokollieren.

angular.io

Q32. Wie wird das URL-Segment aussehen, basierend auf dem folgenden Aufruf der Methode Router.navigate, wenn goToUser der Wert 15 übergeben wird?

export class ToolsComponent {
  constructor(private router: Router) {}
  goToUser(id: number) {
    this.router.navigate(['user', id]);
  }
}
  • /user/15
  • /user?id=15
  • /user:15
  • /user;id=15

angular.io

Q33. Wenn ein Dienst für den Root bereitgestellt wird und auch in die Konfiguration der Anbieter für ein lazy-loaded Modul aufgenommen wird, welches Instanz dieses Dienstes stellt der Injektor für Konstruktoren im lazy-loaded Modul bereit?

  • Eine neue Instanz dieses Dienstes wird erstellt, wenn das Modul lazy geladen wird.
  • Das Bereitstellen eines Dienstes des gleichen Typs auf Modulebene, die lazy geladen werden, ist nicht erlaubt.
  • Wenn eine Instanz des Dienstes noch nicht auf Root-Ebene erstellt wurde, wird dort eine erstellt und dann verwendet.
  • Es wird immer eine einzelne Instanz dieses Dienstes auf Root-Ebene instanziiert und ist die einzige, die jemals verwendet wird, einschließlich innerhalb von Lazy-Modulen.

Q34. Was macht der HostBinding-Dekorierer in dieser Direktive?

@Directive({
  selector: ' [appHighlight] ',
})
export class HighlightDirective {
  @HostBinding('class.highlighted') highlight = true;
}
  • Er fügt dem DOM-Element, das die Direktive appHighlight hat, die CSS-Klasse mit dem Namen highlighted hinzu.
  • HostBinding tut nichts bei Direktiven, sondern nur bei Komponenten.
  • Es wird angegeben, dass, wenn das Host-Element der Klasse highlighted in sein class-Attribut hinzugefügt wird, das Direktiven-Klassenfeld highlight auf true gesetzt wird; und wenn es nicht auf dem Host hinzugefügt wird, wird es auf false gesetzt.
  • Es erstellt ein Inline-Styles auf dem Host-Element mit einer CSS-Eigenschaft mit dem Namen highlight, die auf true gesetzt ist.

StackOverflow

Q35. In reaktiven Formularen, welche Angular-Formularklassentyp wird auf dem nativen DOM <form>-Element verwendet, um es zu verbinden?

  • FormArray
  • FormControl
  • FormGroup
  • alle diese Antworten

Q36. Angenommen, das FormControl für den Benutzernamen wurde mit einem minLength-Validierer konfiguriert, wie können Sie ein Fehlerdisplay in der folgenden reaktiven Formularmarkierung für das Benutzernamenfeld einrichten?

<form [formGroup]="form">
  <input type="text" formControlName="username" />
  ...
</form>
  • %OPTION% A

    <span *ngIf="username.minLength.invalid"> Username length is not valid </span>
    
  • %OPTION% B

    <input type="text" formControlName="username" [showMinLength]="true" />
    
  • %OPTION% C

    <span *ngIf="form.get('username').getError('minLength') as minLengthError">
      Username must be at least {{ minLengthError.requiredLength }} characters.
    </span>
    
  • %OPTION% D

    <input type="text" formControlName="username" #userName="ngModel" />
    <span *ngIf="userName.errors.minlength">
      Username must be at least {{ userName.errors.minlength.requiredLength }} characters.
    </span>
    

Codecraft

Q37. Wie behandelt der emulierte View-Encapsulation-Modus CSS für eine Komponente?

  • Es rendert das CSS genau so, wie Sie es geschrieben haben, ohne Änderungen.
  • Es verwendet Markup und CSS des Schatten-DOMs.
  • Es erstellt eindeutige Attribute für DOM-Elemente und begrenzt die von Ihnen geschriebenen CSS-Selektoren auf diese Attribut-IDs.
  • Es rendert alle von Ihnen geschriebenen CSS-Regeln als Inline-CSS auf allen DOM-Elementen, die Sie in der Vorlage verwenden.

Angular.io

Q38. Mit dem folgenden TestBed-Setup, was kann verwendet werden, um auf das gerenderte DOM für das UserCardComponent zuzugreifen?

TestBed.configureTestingModule({
  declarations: [UserCardComponent],
});
let fixture = TestBed.createComponent(UserCardComponent);
  • fixture.componentTemplate
  • fixture.getComponentHtml()
  • fixture.nativeElement
  • fixture.componentInstance.template
  1. StackOverflow
  2. Angular.io

Q39. Angenommen, Sie haben diese beiden Komponenten, was wird basierend auf der Markup-Verwendung im DOM gerendert?

@Component({
 selector: 'app-card',
 template: '<h1>Data Card</h1><ng-content></ng-content>'
})
export class CardComponent { }

@Component({
 selector: 'app-bio',
 template: '<ng-content></ng-content>.
})
export class BioComponent { }

// markup usage:
<app-card><app-bio>Been around for four years.</app-bio></app-card>
  • %OPTION% A

    <app-card>
      <h1>Data Card</hl>
      <app-bio>
        Been around for four years.
      </app-bio>
    </app-card>
    
  • %OPTION% B

    <h1>Data Card</h1>
    <app-bio> Been around for four years. </app-bio>
    
  • %OPTION% C

    <app-card>
      <h1>Data Card</hl>
      <ng-content></ng-content>
      <app-bio>
        Been around for four years.
        <ng-content></ng-content>
      </app-bio>
    </app-card>
    
  • %OPTION% D

    <app-card>
      <h1>Data Card</hl>
    </app-card>
    

Q40. Angenommen, die App-Title-Card-Komponente im untenstehenden Code, welches DOM wird die App-User-Card-Komponente rendern?

@Component({
   selector: 'app-user-card',
   template: '<app-title-card></app-title-card><p>Jenny Smith</p>'
})

@Component({
   selector: 'app-title-card',
   template: '<h1>User Data</hl>'
})

// usage of user card component in parent component html
<app-user-card></app-user-card>
  • %OPTION% A

    <app-user-card>
      <app-title-card>
        <h1>User Data</h1>
      </app-title-card>
      <p>Jenny Smith</p>
    </app-user-card>
    
  • %OPTION% B

    <h1>User Data</h1>
    <p>Jenny Smith</p>
    <p></p>
    
  • %OPTION% C

    <app-user-card>
      <app-title-card></app-title-card>
    </app-user-card>
    
  • %OPTION% D

    <div app-user-card>
      <h1 app-title-card>User Data</h1>
      <p>Jenny Smith</p>
    </div>
    

Q41. Wählen Sie den passenden Code für die benutzerdefinierte Anbieterregistrierung, nach der der @Inject ()-Dekorierer sucht:

constructor(@Inject('Logger') private logger) { }
  • %OPTION% A

    providers: [Logger];
    
  • %OPTION% B

    providers: [{ provide: 'Logger', useClass: Logger }];
    
  • %OPTION% C

    @Injectable({
        providedln: 'root'
    })
    
  • %OPTION% D

    providers: [{ provide: 'Logger' }];
    
  1. StackOverflow
  2. TektutorialHub
  3. Angular.io - Dependency Injection In Action

Q42. Welche Option beschreibt am besten die folgende Verwendung der HttpClient.get-Methode in der Methode getsettings der Klasse?

export class SettingsService {
    constructor(private httpClient: HttpClient) { }
    ...

getSettings()
{
    return this.httpClient.get<Settings>(this.settingsUrl)
        .pipe(
            retry(3)
        );
}}
  • Die RxJs-Pipe-Methode ist ein Alias für die subscribe-Methode, daher wird ein Aufruf von getSettings die GET-Abfrage ausführen. Der retry-Operator wird verwendet, um dem Pipe-Aufruf mitzuteilen, dass die GET-Abfrage dreimal wiederholt werden soll.
  • Es wird zur Laufzeit einen Fehler geben, weil die Pipe-Methode nicht aus dem Aufruf Httpclient.get verfügbar ist.
  • Jeder einzelne Aufruf der Methode getSettings führt dazu, dass der Httpclient insgesamt drei GET-Anforderungen an die settingsUrl sendet, was nicht ideal ist, da immer zwei zusätzliche Aufrufe erfolgen, die nicht benötigt werden. Der retry-Operator sollte nicht auf diese Weise verwendet werden.
  • Wenn das Ergebnis der Methode getSettings abonniert wird, wird der HTTP-GET-Aufruf durchgeführt; wenn er fehlschlägt, wird er bis zu drei Mal wiederholt, bevor er aufgibt und einen Fehler zurückgibt.
  1. learnrxjs.io
  2. dev.to

Q43. Wenn ein Dienst einige Einrichtung erfordert, um seinen Standardzustand über eine Methode zu initialisieren, wie können Sie sicherstellen, dass diese Methode aufgerufen wird, bevor der Dienst irgendwo injiziert wird?

  • Legen Sie die Logik dieser Dienstmethode in den Dienstkonstruktor.
  • Verwenden Sie einen Factory-Anbieter auf der Root-AppModule-Ebene, der vom Dienst abhängt, um diese Dienstmethode aufzurufen.
  • Es ist nicht möglich, dies beim Start der Anwendung zu tun; Sie können es nur auf Komponentenebene tun.
  • Instanziieren Sie eine Instanz des Dienstes auf globaler Ebene (Fensterbereich) und rufen Sie dann diese Methode auf.
  1. Angular.io
  2. Stackoverflow

Q44. Was beschreibt am besten die Verwendung von TestBed?

const spy = jasmine.createSpyObj('DataService', ['getUsersFromApi']);
TestBed.configureTestingModule({
  providers: [UserService, { provide: DataService, useValue: spy }],
});
const userService = TestBed.get(UserService);
  • Das TestBed wird immer benötigt, wenn Sie ein Spionageobjekt in einem Einheitstest für einen Angular-Anbieter verwenden möchten.
  • Das TestBed wird verwendet, um die Ansicht eines Komponenten zu testen.
  • Das TestBed konstruiert ein NgModule mit zwei Anbietern und behandelt jede Abhängigkeitsinjektion. Wenn eine Angular-Klasse den DataService in ihrem Konstruktor anfordert, wird der TestBed einen Spion in diesen Konstruktor einfügen.
  • Das TestBed konfiguriert den Testrunner so, dass nur Tests für die beiden Anbieter in seinem Anbieter-Array ausgeführt werden.

Alle anderen Tests werden ignoriert, einschließlich Tests, die Ergebnisse gegen einen dieser Anbieter und einen nicht definierten Anbieter überprüfen. Obwohl es funktioniert, wenn mehrere Anbieter in dieser Konfiguration in einem einzelnen Test überprüft werden.

Q45. Was ist der Hauptunterschied zwischen einer Komponente und einer Direktive?

  • Eine Komponente verwendet eine Selector-Metadaten-Eigenschaft und eine Direktive nicht.
  • Eine Direktive kann verwendet werden, um benutzerdefinierte Ereignisse dem DOM hinzuzufügen, und eine Komponente kann dies nicht.
  • Eine Komponente hat ein Template und eine Direktive nicht.
  • Eine Direktive kann nur auf native DOM-Elemente abzielen.

StackOverflow

Q46. Was könnten Sie dieser Direktivenklasse hinzufügen, um die Länge des Abschneidens während der Verwendung der Direktive in der Markup zu ermöglichen?

@Directive({
    selector: '[appTruncate]'
})
export class TruncateDirective {
    . . .
}

// example of desired usage:
<p [appTruncate]="10">Some very long text here</p>
  • @Input() appTruncate: number;
  • @Output() appTruncate;
  • constructor(maxLength: number) { }
  • Nichts. Der Direktiv-Selektor kann nicht verwendet werden, um Werte an die Direktive zu übergeben.
  1. Angular.io
  2. StackOverflow

Q47. Wie können Sie Abfrageparameter an diese HttpClient.get Anfrage übergeben?

export class OrderService {
  constructor(private httpClient: HttpClient) {}

  getOrdersByYear(year: number): Observable<Order[]> {
    return this.httpClient.get<Order[]>(this.ordersUrl);
  }
}
  • %OPTION% A return this.httpClient.get<Order[]>(this.ordersUrl, {'year': year})

  • %OPTION% B return this.httpClient.get<Order[]>(this.ordersUrl, year)

  • %OPTION% C

    const options = { params: new HttpParams().set('year', year) };
    return this.httpClient.get<Order[]>(this.ordersUrl, options);
    
  • %OPTION% D

    getOrdersByYear(year: number): Observable<Order[]> {
        return this.httpClient.addParam('year', year).get<Order[]>(this.ordersUrl, year);
    }
    
  1. StackOverflow
  2. TektutorialHub

Q48. Vorausgesetzt, dass der DataService in den Anbietern für die Anwendung registriert wurde, welche Antwort beschreibt am besten, was basierend auf dem Konstruktor dieser Komponente passiert?

@Component({
    ...
})
export class OrderHistoryComponent {
    constructor(private dataService: DataService) {}
    ...
}
  • Es erklärt, dass die OrderHistoryComponent ihre eigene Version eines DataService haben wird und dass es niemals vorhandene Instanzen verwenden sollte. Der DataService müsste als privates Feld innerhalb der Klasse instanziiert werden, damit dieser Code vollständig und funktionsfähig ist.
  • Wenn Angular eine neue Instanz der OrderHistoryComponent erstellt, wird der Injektor eine Instanz einer DataService-Klasse für das erste Argument des Komponentenkonstruktors bereitstellen. Der Konstruktorparameter dataService wird verwendet, um ein privates Instanzfeld mit demselben Namen in der Instanz zu setzen.
  • Es bietet eine Möglichkeit, nur Komponententests durchzuführen; der Konstruktor hat keine Verwendung im eigentlichen Betrieb der Angular-Anwendung.
  • Es ermöglicht es dem benutzerdefinierten Element, auf das die Komponente abzielt, eine benutzerdefinierte Eigenschaft namens dataService zu haben, die zum Binden einer vorhandenen DataService-Instanz verwendet werden kann.
  1. StackOverflow
  2. Angular.io - Dependency Injection

Q49. Beenden Sie dieses Markup mit der ngIf Direktive, um einen anderen Fall zu implementieren, der den Text "Benutzer ist nicht aktiv" anzeigt:

<div *ngIf="userIsActive; else inactive">Currently active!</div>
  • %OPTION% A

    <div #inactive>User is not active.</div>
    
  • %OPTION% B

    <div *ngIf="inactive">User is not active.</div>
    
  • %OPTION% C

    <ng-template #else="inactive">
      <div>User is not active.</div>
    </ng-template>
    
  • %OPTION% D

    <ng-template #inactive>
      <div>User is not active.</div>
    </ng-template>
    

Angular.io

Q50. Was ist die richtige Syntax für eine Routendefinition zum Lazy-Loading eines Feature-Moduls?

  • %OPTION% A

    {
      path: 'users',
      lazy: './users/users.module#UsersModule'
    }
    
  • %OPTION% B

    {
      path: 'users',
      loadChildren: () => import('./users/users.module').then(m => m.UserModule)
    }
    
  • %OPTION% C

    {
      path: 'users',
      loadChildren: './users/users.module#UsersModule'
    }
    
  • %OPTION% D

    {
      path: 'users',
      module: UsersModule
    }
    

Angular.io - Lazy Loading Modules

Q51. Beschreiben Sie, wie die Validierung in diesem Beispiel für reaktive Formulare eingerichtet und konfiguriert ist:

export class UserFormControl implements OnInit {
    ...
    ngOnInit() {
        this.form = this.formBuilder.group({
            username: this.formBuilder.control('',
                [Validators.required, Validators.minLength(5), this.unique]),
        )};
    }
    unique(control: FormControl) {
        return control.value !== 'admin' ? null: {notUnique: true};
    }
}
  • Das FormControl für username wird so konfiguriert, dass drei Validatoren von den Validatoren ausgeschlossen werden, die es verwenden darf.
  • Das FormControl für username wird so konfiguriert, dass drei mögliche Validatoren verwendet werden können: required, maxLength und ein benutzerdefinierter namens unique. Um diese Validator zu aktivieren, müsste eine Validator-Direktive auf den Formularfeldern im Markup platziert werden.
  • Validierung kann in reaktiven Formularen nicht auf diese Weise eingerichtet werden.
  • Das FormControl für username wird mit drei Validatoren konfiguriert: den required- und minLength-Validatoren, die von Angular stammen, und einer benutzerdefinierten Validierungsfunktion namens unique, die prüft, ob der Wert ungleich dem String admin ist.
  1. Angular.io - Form Validation
  2. Angular University Blog

Q52. Was macht der Injectable-Decorator auf dieser Serviceklasse?

@Injectable({
    providedIn: 'root'
)}
export class DataService { }
  • Er registriert einen Anbieter für den Dienst, der nur auf der Root-Modul-Ebene verfügbar ist, nicht für alle untergeordneten Module.
  • Er registriert einen Anbieter für den Dienst im Root-Anwendungs-Injektor und macht eine einzelne Instanz davon in der gesamten Anwendung verfügbar.
  • Er ermöglicht es, den Dienst nur im startkomponente für die Anwendung zu injizieren.
  • Es richtet eine Kompilierungszeitregel ein, die es Ihnen ermöglicht, den Diensttyp nur in der Providers-Metadaten-Eigenschaft des Root-NgModule zu platzieren.

Angular.io

Q53. Beschreiben Sie die Verwendung dieses Codes

export interface AppSettings {
  title: string;
  version: number;
}
export const APP_SETTINGS = new InjectionToken<AppSettings>('app.settings');
  • Das InjectionToken fügt eine Instanz von AppSettings über den InjectionToken-Konstruktoraufruf dem Root-Anbieter hinzu, wodurch sie automatisch allen NgModules, Diensten und Komponenten in der Angular-Anwendung ohne Notwendigkeit zur Injektion zur Verfügung steht.
  • Das InjectionToken wird verwendet, um ein Anbieter-Token für eine Nicht-Klassenabhängigkeit zu erstellen. Ein Objektliteral kann als Wert für den APP_SETTINGS-Abhängigkeitsanbieter-Typ bereitgestellt werden, der dann in Komponenten, Diensten usw. injiziert werden kann.
  • Das InjectionToken wird verwendet, um einen dynamischen Dekorator für die AppSettings zu erstellen, der auf Konstruktorparameter über einen @AppSettings-Dekorator angewendet werden kann.
  • Dieser Code hat einen Fehler, da Sie keinen TypeScript-Interface für den generischen Typ auf dem InjectionToken verwenden können.

Q54. Für das folgende Beispiel für Template-driven Formulare, welches Argument kann der submit-Methode im Klickereignis übergeben werden, um die Daten für das Formular zu übermitteln?

<form #form="ngForm">
  <input type="text" ngModel="firstName" /> <input type="text" ngModel="lastName" />
  <button (click)="submit()">Save</button>
</form>
  • submit(form.value)
  • submit($event)
  • submit(ngForm.value)
  • submit(Vorname, Nachname)

Q55. Was ist der Zweck der prelodingStrategy-Eigenschaftskonfiguration in diesem Routen-Code?

RouterModule.forRoot(
  ...{
    preloadingStrategy: PreloadAllModules,
  },
);
  • Es ermöglicht die Option, einzelne Routen für das Vorladen zu markieren.
  • Es lädt alle Abhängigkeiten für Routen im Voraus, indem es Instanzen von Diensten erstellt, wenn die App zum ersten Mal gestartet wird.
  • Es stellt sicher, dass alle Module in eine einzige App-Modul-Bundle-Datei gebaut werden.
  • Es konfiguriert den Router so, dass sofort alle Routen geladen werden, die eine loadChildren-Eigenschaft haben (Routen, die normalerweise bei Bedarf geladen werden).

Referenzen:

Q56. Wie kann diese Markup-Alternative geschrieben werden, um den Wert des Feldes userName an das Titelattribut des h1-Elements zu binden?

<h1 [title]="userName">Current user is {{ userName }}</h1>
  • title="userName"
  • title="{{ userName }}"
  • title="{{ 'userName' }}"
  • Der einzige Weg, dies zu tun, besteht darin, eckige Klammern zu verwenden.

Q57. Was bewirkt das async-Pipe in diesem Beispiel?

@Component({
  selector: 'app-users',
  template: '<div *ngFor="let user of users | async">{{ user.name }}</div>',
})
export class UsersComponent implements OnInit {
  users;
  constructor(private httpClient: HttpClient) {}
  ngOnInit(): void {
    this.users = this.httpClient.get<{ name: string }>('users');
  }
}
  • Es tut nichts, da das async-Pipe nicht in einer ngFor-Anweisung verwendet werden kann.
  • Es konfiguriert die ngFor-Iteration, um gleichzeitig mehrere Listen von Benutzern zu unterstützen.
  • Es abonniert das von der Methode HttpClient.get zurückgegebene Observable und entpackt den zurückgegebenen Wert, damit er in der ngFor iteriert werden kann.
  • Es ermöglicht es, alle Benutzer im Feld users gleichzeitig im DOM zu rendern.

Q58. Wie würden Sie diese Direktive im Markup basierend auf ihrem Selektorwert verwenden?

@Directive({  selector: '[appTruncate]'
})
export class TruncateDirective{  . . .
}
  • html <p data-directive="appTruncate">Some long text </p>
  • html <p appTruncate>Some long text</p>
  • html <p app-truncate>Some long text</p>
  • html <app-truncate>Some long text</app-truncate>

Q59. Welcher Lifecycle-Hook kann auf einer Komponente verwendet werden, um alle Änderungen an @Input-Werten auf dieser Komponente zu überwachen?

  • ngOnInit
  • ngChanges
  • ngAfterInputChange
  • ngOnChanges

Wie erkenne ich, wenn sich ein @Input() Wert in Angular ändert?

Q60. Was wäre ein Beispiel für die Verwendung dieser benutzerdefinierten Pipe in der Template-Syntax?

@Pipe({ name: 'truncate' })
export class TruncatePipe implements PipeTransform {
  transform(value: string, maxLength: number, showEllipsis: boolean) {
    const newValue = maxLength ? value.substr(0, maxLength) : value;
    return showEllipsis ? '${newValue}...' : newValue;
  }
}
  • {{ 'some long text' | truncate:10 }}
  • {{ 'some long text' | truncate: 10, true }}
  • {{ 'some long text' | truncate }}
  • alle diese Antworten

[Wie rufe ich eine Angular 2 Pipe mit mehreren Argumenten auf?] (https://stackoverflow.com/questions/36816788/how-do-i-call-an-angular-2-pipe-with-multiple-arguments)

Q61. Welchen Angular CLI-Befehl würden Sie ausführen, um eine UsersComponent zu generieren und sie zum SharedModule hinzuzufügen (in der Datei shared.module.ts in Ihrer Anwendung)?

  • ng generate component --newModule=shared
  • ng generate component users --module=shared
  • ng generate component users --shared
  • ng generate component --add=shared

Q62. Wie können Sie dieses Markup neu schreiben, damit der div-Container beim endgültigen DOM-Rendering nicht benötigt wird?

<div *ngIf="location">
  <h1>{{ location.name }}</h1>
  <p>{{ location.description }}</p>
</div>
  • %OPTION% A

    <div *ngIf="location">
      <h1>{{ location.name }}</h1>
      <p>{{ location.description }}</p>
      {{ endNgIf }}
    </div>
    
  • %OPTION% B

    <ng-template *ngIf="location">
      <h1>{{ location.name }}</h1>
      <p>{{ location.description }}</p>
    </ng-template>
    
  • %OPTION% C

    <div *ngIf="location" [display]=" ' hidden' ">
      <h1>{{ location.name }}</h1>
      <p>{{ location.description }}</p>
    </div>
    
  • %OPTION% D

    <ng-container *ngIf="location">
      <h1>{{ location.name }}</h1>
      <p>{{ location.description }}</p>
    </ng-container>
    

Q63. Beschreiben Sie die Verwendung dieses Codes:

export interface AppSettings {
  title: string;
  version: number;
}
  • Dieser Code enthält einen Fehler, da Sie eine TypeScript-Schnittstelle nicht für den generischen Typ auf InjectionToken verwenden können.
  • Das InjectionToken wird verwendet, um einen Provider-Token für eine nicht-klassenbasierte Abhängigkeit zu erstellen. Ein Objektliteral kann als Wert für den APP_SETTINGS-Abhängigkeitsprovider-Typ bereitgestellt werden, der dann in Komponenten, Diensten usw. injiziert werden kann.
  • Das InjectionToken fügt über den Aufruf des InjectionToken-Konstruktors eine Instanz von AppSettings zum Root-Provider hinzu, sodass sie automatisch für alle NgModules, Dienste und Komponenten in der Angular-Anwendung verfügbar ist, ohne sie irgendwo injizieren zu müssen.
  • Das InjectionToken wird verwendet, um einen dynamischen Dekorator für die AppSettings zu erstellen, der auf Konstruktorparametern über einen @AppSettings-Dekorator verwendet werden kann.

Q64. Welche Angular-Hilfsprogramme werden benötigt, um einen Dienst ohne Konstruktorabhängigkeiten zu testen?

  • Die By.css() -Hilfsmethode ist erforderlich.
  • Ein Text-Fixture ist erforderlich, um den Dienst für den Unittest auszuführen.
  • Keine. Ein Dienst kann eigenständig instanziiert und unabhängig getestet werden.
  • Die TestBed-Klasse wird benötigt, um den Dienst zu instanziieren.

Angular Unittests - Antworten überprüfen

Q65. Was ist der Unterschied zwischen den Routenschutz-CanActivate- und CanLoad-Routenwächtern?

  • CanActivate wird verwendet, um den Zugriff zu überprüfen. CanLoad wird verwendet, um Daten für die Route vorab zu laden.
  • CanLoad wird beim App-Start verwendet, um das Hinzufügen von Routen zur Routentabelle zu erlauben oder zu verweigern. CanActivate wird verwendet, um den Zugriff auf Routen zum Zeitpunkt ihrer Anforderung zu verwalten.
  • CanActivate und CanLoad tun genau dasselbe.
  • CanLoad verhindert die Bereitstellung und das Laden eines gesamten NgModule. CanActivate stoppt die Routenführung zu einer Komponente in diesem NgModule, aber dieses Modul wird dennoch geladen.

CanActivate vs Canload CanActivate verhindert den Zugriff auf Routen, CanLoad verhindert das verzögerte Laden.

Q66. Wofür wird die Outlet-Eigenschaft im Router-Definition-Objekt verwendet?

{  path: 'document',  component: DocumentComponent,  outlet: 'document-box'
}
  • Es werden alle Instanzen von <document-box> im DOM lokalisiert und bei der Routennavigation ein DocumentComponent-Element in sie eingefügt.
  • Es wird erklärt, dass das DocumentComponent neben der Routenführung als Kind zu einem <document-box>-Element verwendet werden kann.
  • Es wird verwendet, um ein <router-outlet>-Element mit dem Attributnamen, das mit dem Zeichenfolgenwert übereinstimmt, als Ort für das Rendern von DocumentComponent festzulegen, wenn darauf zugegriffen wird.
  • Es ist eine Stromquelle für den Router. (Definitiv nicht die Antwort :P)

Angular-outlet - Antwort überprüfen

Q67. In dieser Vorlagensyntax führt die ngFor-Strukturanweisung bei jeder Änderung der items-Eigenschaft (Hinzufügen, Entfernen usw.) ihre Logik für alle DOM-Elemente in der Schleife erneut aus. Welche Syntax kann verwendet werden, um dies effizienter zu machen?

<div *ngFor="let item of items">{{ item.id }} - {{ item.name }}</div>
  • *ngFor="let item of items; let uniqueItem"
  • *ngFor="let item of items.distinct()"
  • *ngFor="let item of items: let i = index"
  • *ngFor="let item of items; trackBy: trackById"

StackOverflow - Verwendung von trackBy mit ngFor

Q68. Was macht dieses Angular-CLI-Kommando?

ng build --configuration=production --progress=false
  • Es erstellt die Angular-Anwendung, legt die Build-Konfiguration auf das im angular.json-Datei angegebene "production"-Ziel fest und gibt den Fortschrittsausgabe auf der Konsole aus.
  • Es erstellt die Angular-Anwendung, legt die Build-Konfiguration auf das im angular.json-Datei angegebene "production"-Ziel fest und überwacht Dateien auf Änderungen.
  • Es erstellt die Angular-Anwendung, legt die Build-Konfiguration auf das im angular.json-Datei angegebene "production"-Ziel fest und deaktiviert das Überwachen von Dateien auf Änderungen.
  • Es erstellt die Angular-Anwendung, legt die Build-Konfiguration auf das im angular.json-Datei angegebene "production"-Ziel fest und verhindert die Fortschrittsausgabe auf der Konsole.

Angular-Dokumentation - ng build

Q69. Können Servicetypen über welche Dekoratoren als Anbieter registriert werden?

  • @Injectable, @NgModule, @Component und @Directive.
  • Nur @Injectable.
  • Nur @Injectable und @NgModule.
  • Nur @Service und @NgModule.

Q70. Wofür wird der Input-Dekorator in dieser Komponentenklasse verwendet?

@Component({  selector:'app-product-name',  ...
})
export class ProductNameComponent {  @Input() productName: string
}
  • Es wird einfach verwendet, um einen Kommentar vor einem Klassenfeld zur Dokumentation zu platzieren.
  • Es bietet eine Möglichkeit, Werte an das productName-Feld zu binden, indem der Komponenten-Selektor verwendet wird.
  • Es generiert automatisch ein html <input type='text' id='productName'> DOM-Element in der Komponentenvorlage.
  • Es bietet eine Möglichkeit, Werte an das productName-Instanzfeld zu binden, ähnlich wie bei nativen DOM-Elementeigenschaftsbindungen. Angular-Dokumentation - Input()

Q71. Welcher Routenwächter kann verwendet werden, um die Navigation zu einer Route zu vermitteln?

Q72. Wie kann der Injector konfiguriert werden, um ein vorhandenes Objekt für ein Token zu verwenden, anstatt eine Klasseninstanz zu instanziieren?

  • Verwenden Sie die useValue-Anbieterkonfiguration und setzen Sie diese auf ein vorhandenes Objekt oder ein Objektliteral.
  • Es ist nicht möglich. Anbieter können nur mit Klassen erstellt werden.
  • Fügen Sie einfach die Objektinstanz oder das Objektliteral dem Array des Anbieters hinzu.
  • Verwenden Sie die asValue-Anbieterkonfigurationseigenschaft und setzen Sie sie auf true.

Konfigurieren von Abhängigkeitsanbietern

Q73. Basierend auf dieser Routendefinition, was kann dem Konstruktor von UserDetailComponent injiziert werden, um den id-Routenparameter zu erhalten?

{path: 'user/:id', component: UserDetailComponent }
  • ActivatedRoute
  • CurrentRoute
  • UrlPath
  • @Inject('id')

Gängige Routing-Aufgaben

Q74. Mit dem folgenden reaktiven Formularmarkup, was würden Sie hinzufügen, um einen Aufruf an eine onSubmit-Klassenmethode anzuschließen?

<form [formGroup]="form">
  <input type="text" formControlName="username" />
  <button type="submit" [disabled]="form. invalid">Submit</button>
</form>
  • Keine dieser Antworten
  • Fügen Sie (click)="onSubmit()" dem <button>-Element hinzu.
  • Fügen Sie (ngSubmit)="onSubmit()" dem <form>-Element hinzu.
  • Beide dieser Antworten

Angular - Formulare

Q75. Wie lautet der erwartete DOM-Code für die Verwendung der ngClass-Attributdirektive, wenn isActive true ist?

<div [ngClass]="{ ‘active-item': isActive }">Item One</div>
  • <div active-item>Item One</div>
  • <div class="active-item">Item One</div>
  • <div class="is-active">Item One</div>
  • <div class="active-item isActive">Item One</div>

Angular - NgClass

Q76. Welche Antwort erklärt am besten die Verwendung von ngModel in diesem Vorlagencode?

<input [(ngModel)]="user.name" />
  • Es zeigt das Eingabeelement nur an, wenn die user.name-Eigenschaft einen Wert hat.
  • Es ist die Zweiwege-Datenbindungsyntax. Der Wert der Eingabeelement-Eigenschaft wird mit der user.name-Eigenschaft verbunden, und das Wertänderungsereignis für das Formularelement aktualisiert den Wert der user.name-Eigenschaft.
  • Im Code ist ein Tippfehler vorhanden. Es sollte nur die eckigen Klammern haben.
  • Es bindet den Wert der user.name-Eigenschaft an die val-Eigenschaft des Eingabeelements, um ihren Initialwert festzulegen.

Angular - NgModel

Q77. Welche Methode wird verwendet, um ein FormControl mit einem nativen DOM-Eingabeelement in reaktiven Formularen zu verbinden?

  • Verwenden Sie den als Wert für das DOM-Element-ID-Attribut gegebenen Zeichenfolgennamen des FormControl.
  • Verwenden Sie die formControlName-Direktive und setzen Sie den Wert auf den als Wert für das FormControl gegebenen Zeichenfolgennamen.
  • Fügen Sie den als Wert für das FormControl gegebenen Zeichenfolgennamen einem Attribut namens controls auf dem <form>-Element hinzu, um anzuzeigen, welche Felder es enthalten soll.
  • Verwenden Sie die eckige Klammerbindungssyntax um das value-Attribut des DOM-Elements und setzen Sie dies auf eine Instanz des FormControls.

Angular - Reaktive Formulare

Q78. Welche andere Vorlagensyntax (Ersetzung der ngClass-Direktive) kann verwendet werden, um die CSS-Klassen in diesem Markup hinzuzufügen oder zu entfernen?

<span [ngClass]="{ 'active': isActive, 'can-toggle': canToggle }"> Employed </span>
  • %OPTION% A

    <span class="{{ isActive ? 'is-active' : '' }} {{ canToggle ? 'can-toggle' : '' }}">
      Employed
    </span>
    
  • %OPTION% B

    <span [class.active]="isActive" [class.can-toggle]="canToggle"> Employed </span>
    
  • %OPTION% C

    <span [styles.class.active]="isActive" [styles.class.can-toggle]="canToggle"> Employed </span>
    
  • %OPTION% D

    <span [css.class.active]="isActive" [css.class.can-toggle]="canToggle"> Employed </span>
    

Q79. In diesem Direktiv-Dekoratorbeispiel, was ist der Zweck der multi-Eigenschaft im Anbieter-Objektliteral?

@Directive({
  selector: '[customValidator]',
  providers: [
    {
      provide: NG_VALIDATORS,
      useExisting: CustomValidatorDirective,
      multi: true,
    },
  ],
})
export class CustomValidatorDirective implements Validator {}
  • Es gibt an, dass die CustomValidatorDirective auf mehreren Formularelementtypen verwendet werden kann.
  • Es ermöglicht die Instanziierung mehrerer Instanzen der CustomValidatorDirective. Ohne multi wäre die CustomValidatorDirective ein Singleton für die gesamte App.
  • Es ermöglicht die Registrierung verschiedener Anbieter für das einzelne NG_VALIDATORS-Token. In diesem Fall wird die CustomValidatorDirective zur Liste der verfügbaren Formularvalidatoren hinzugefügt.
  • Es gibt an, dass es mehrere Klassen geben wird, die die Logikimplementierung für den benutzerdefinierten Validator behandeln.

StackOverflow

Q80. Welches Angular-CLI-Kommando würden Sie verwenden, um Ihre Unittests in einem Prozess auszuführen, der Ihre Testsuite bei Dateiänderungen erneut ausführt?

  • ng test --single-run=false
  • ng test --watch-files
  • ng test --progress
  • ng test

Q81. Wofür wird am häufigsten das ngOnDestory-Lebenszyklushook verwendet?

  • Entfernen von DOM-Elementen aus der Ansicht der Komponente
  • Alle diese Antworten
  • Löschen von injizierten Diensten
  • Abmelden von Beobachtbaren und Trennen

Q82. Welche NgModule-Dekoratormetadateneigenschaft wird genutzt, um anderen .... zu erlauben?

  • öffentlich
  • Experten
  • Gemeinsam
  • Deklarationen

Q83. Was ist der Unterschied zwischen den CanActivate- und CanLoad-Routenwächtern?

  • CanLoad verhindert das Bereitstellen und Laden eines gesamten NGModules. CanActivate stoppt die Routenführung zu einer Komponente in diesem NgModule, aber das Modul wird dennoch geladen.
  • CanActivate und CanLoad tun genau dasselbe.
  • CanActivate wird verwendet, um den Zugriff zu überprüfen. CanLoad wird verwendet, um Daten für die Route vorab zu laden.
  • CanLoad wird beim App-Start verwendet, um das Hinzufügen oder Verweigern von Routen zur Routentabelle zu ermöglichen. CanActivate wird verwendet, um den Zugriff auf Routen zum Zeitpunkt ihrer Anforderung zu verwalten.

Q84. Mit der folgenden Komponentenklasse, welche Vorlagensyntax würden Sie im Template verwenden, um das Ergebnis des Aufrufs der currentYear-Klassenfunktion anzuzeigen?

@Component({
  selector: 'app-date-card',
  template: '',
})
export class DateCardComponent {
  currentYear() {
    return new Date().getFullYear();
  }
}
  • {{ currentYear() }}
  • {{ component.currentYear() }}
  • {{ currentYear }}
  • Klassenfunktionen können nicht aus der Vorlagensyntax aufgerufen werden.