Wie kann ich auf die "select" - Methode von NgbTabSet in der Komponente in Angular2 und ng-bootstrap?
Verwendung 2.3.1 Winkel-und ng-bootstrap-1.0.0-alpha.18. Ich bin versucht, programmgesteuert wählen Sie eine Registerkarte ID aus der Komponente, anstatt aus der Vorlage. Das Ziel ist, ziehen Sie den Parameter aus der url und zu verwenden, wählen Sie die Registerkarte ngOnInit
die Vorlage
<section id="policy-terms">
<ngb-tabset>
<ngb-tab title="Terms and Privacy" id="terms">
<template ngbTabContent>
<div class="container page-content">
</div>
</template>
</ngb-tab>
<ngb-tab title="Company Policy" id="policy">
<template ngbTabContent>
<div class="container page-content">
</div>
</template>
</ngb-tab>
</ngb-tabset>
</section>
Sowie die Komponente-code:
import { Component, OnInit } from '@angular/core';
import { NgbTabset } from '@ng-bootstrap/ng-bootstrap';
@Component({
selector: 'app-policy-terms',
templateUrl: './policy-terms.component.html',
styleUrls: ['./policy-terms.component.scss'],
providers: [
NgbTabset
]
})
export class PolicyTermsComponent implements OnInit {
constructor(
public tabset: NgbTabset
) { }
ngOnInit() {
this.tabset.select('policy');
}
}
Dieser nur einen Fehler produziert:
Wie kann ich auf diese Methode zugreifen?
InformationsquelleAutor bikeguy | 2017-02-24
Du musst angemeldet sein, um einen Kommentar abzugeben.
Routing mit Ngb-TabSet
In AngularJs 1.x mit ui-router einrichten-Namen-Strecken war gerade nach vorne. Im Winkel 2 mit Ng-Bootstrap-es ist nicht so offensichtlich. Auf der anderen Seite, was Sie brauchen, ist verfügbar im einheitlichen Winkel 2 Bibliotheken.
Einrichtung der Route-Konfiguration
Die Konfiguration ist einfach und unkompliziert-mit einer Ausnahme: die [Daten] Attribut. Sie werden feststellen, es hat einen Schlüssel namens
name
. Dies ist der name der route. Betrachten Sie es als ein data-Attribut als Daten-Tasche. Sie können mehr als nur den Namen der route ein.Einrichten der TabSet Markup
Es ist nichts Magisches an den oberen Reiter markup, gibt es paar Dinge, die Sie beachten sollten: der erste ist in der
ngb-tabset
element, wir haben deklariert die variable#tab
. Wir verwenden#tab
später in der Komponente. Zweitens, jedernbg-tab
hat eineid
Satz entspricht der name den wir definiert, die in der route-Konfiguration (d.h.data:{name:'followups'}
).Einrichten der Komponente
Der schwierigste Teil in dieser übung war, die Reihenfolge der Ausführung zu korrigieren. Wenn es nicht richtig ist, eine Sammlung oder eine Eigenschaft nicht initialisiert werden, bevor Sie operieren. Wir beginnen an der Spitze der Klasse und arbeiten uns nach unten.
Zunächst haben wir die Variablen.
prospectId
ist der Primärschlüssel der DatenselectedTab
ist der name der aktuell ausgewählten Registerkarte, und schließlich haben wir dietabs
variable.tabs
ist eine Referenz auf das Attribut (#tab
) haben wir Hinzugefügt, um diengb-tabset
element.Weiter ist die
constructor
. Es ist nicht offensichtlich in der Dokumentation, aberdata
ist einObservable<data>
. Um den Wert, wir abonnieren diedata
Eigenschaft, aus der route.Folgenden die
constuctor
ist diengOnInit
. Dies ist nicht wichtig, die Tabletten, aber es tut erfassen die prospectId, die wir verwenden in der Registerkarte routing. Wenn Sie nicht alle dynamischen Daten in den Routen, dann brauchen Sie nicht diese.Schließlich haben wir
ngAfterViewChecked
. Für die Weiterleitung dertabs
, das ist das wichtigste. Hier verwenden wir dietabs
variable, die wir erfasst haben, das markup und es ist, wo wir passieren die ausgewählte Registerkarte name, um dietabs
zum ändern der ausgewählten Registerkarte.Update
Damit dies funktioniert einwandfrei, ich hatte Sie auf hinzufügen, um hook in das
tabChange
Veranstaltung auf derngb-tabset
.HTML:
Typoskript:
Außerdem hatte ich zu fest die Routen in der onTabChange Funktion.
Wenn Sie mithilfe der tab-Komponente außerhalb der route, d.h. die Komponente ist nicht direkt Teil der route, der route-parameter null sein. Müssen Sie massage Sie den code unten, um es zu arbeiten, aber es wird Ihnen Zugriff auf die Daten, die Sie brauchen. ` ` / / "Wir tun es auf diese Weise, weil die Komponente ist nicht Teil eines // route. Es Leben außerhalb der route/activatedRoute Hierarchie. diese.router.Veranstaltungen.abonnieren(val => { if (val instanceof RoutesRecognized) { sei f = val.Zustand.root.firstChild.params['query']; dies.searchText = q; }}); ``
InformationsquelleAutor Chuck Conway
Falls jemand will, es zu tun, die von der Vorlage, der beste Ansatz ist :
InformationsquelleAutor Adrita Sharma
Dies ist passiert weil Sie telefonieren wählen Sie auf den Registerkarten vor denen haben selbst initialisiert wurde. NgTabset initialisiert sind nach Ansicht init. Ich benutzte ein boolean um anzuzeigen, wenn Sie initialisiert wurden vor dem Aufruf von select.
eigentlich nehme ich meine Worte zurück, müssen
#tab
auf die ngb-tabsets tag, so bindet Sie an das DOM.InformationsquelleAutor hnameer-GRIT
Setzen Sie eine Referenz auf das element
Verwenden ViewChild zur Steuerung der Registerkarte
Zog ich die Ausführung der select-ein Satz, so sicher sein, dass die Seite ordnungsgemäß erstellt die tabs-Komponente und kann es referenziert und verwendet werden.
<ngb-tabset #tabSet>
@ViewChild('tabSet') tabset: NgbTabset; constructor ( console.info("tabset",this.tabset); ...
aber tabset ist immer undefiniert ?InformationsquelleAutor misha130