Website-Suche

angular - Angular2, TypeScript, Wie liest man/Bindet man einen Attributwert an eine Komponentenklasse (undefiniert in ngOnInit)


Kann mir bitte jemand erklären, wie man einen Attributwert an eine @Component-Klasse liest/bindet, der in der ngOnInit-Methode anscheinend undefiniert ist?

Hier ist eine Plunker-Demo: http://plnkr.co/edit/4FoFNBFsOEvvOkyfn0lw?p=preview

Ich möchte den Wert des Attributs "someattribute" lesen

<my-app [someattribute]="'somevalue'">

innerhalb der App-Klasse (src/app.ts) ngOninit-Methode.

Danke!

Antwort #1

Sie können feststellen, dass solche Parameter nicht für die Root-Komponente verwendet werden können. Siehe diese Frage für weitere Details:

  • Angular 2 Eingabeparameter beim Root-Directive

Die Umgehungslösung besteht darin, die ElementRef-Klasse zu nutzen. Sie muss in Ihre Hauptkomponente injiziert werden:

constructor(elm: ElementRef) {
  this.someattribute = elm.nativeElement.getAttribute('someattribute'); 
}

Wir müssen die Komponente auf diese Weise in der HTML-Datei verwenden:

<my-app someattribute="somevalue"></my-app>

Antwort #2

Sie sollten den @Input-Dekorator verwenden.

Dies ist ein Beispiel:

import { Component, Input } from '@angular/core';

@Component({
    selector: 'user-menu',
    templateUrl: 'user-menu.component.html',
    styleUrls: ['user-menu.component.scss'],
})
export class UserMenuComponent {

    /**
     * userName Current username
     */
    @Input('userName') userName: string;

    constructor() {

    }
    sayMyName() {
        console.log('My name is', this.userName);
    }
}

Und es zu benutzen

<user-menu userName="John Doe"></user-menu>

Verwandte Artikel