Comment puis-je accéder à la fonction " sélectionner la méthode de NgbTabSet dans le composant en Angular2 et ng-bootstrap?
À l'aide Angulaire 2.3.1 et ng-bootstrap 1.0.0-alpha.18. Je suis en train de programmation pour sélectionner un onglet sur la base de l'ID du composant plutôt que de partir dans le modèle. L'objectif est de tirer le paramètre de l'url et de l'utiliser pour sélectionner l'onglet ngOnInit
le modèle
<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>
Et le code du composant:
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');
}
}
Ce seulement produit une erreur:
Journal de la Console d'erreurs
Comment puis-je accéder à cette méthode?
OriginalL'auteur bikeguy | 2017-02-24
Vous devez vous connecter pour publier un commentaire.
De routage avec Ngb-TabSet
Dans AngularJs 1.x à l'aide de l'interface utilisateur du routeur configuration de noms de routes était simple. Dans Angulaire 2 avec Ng-Bootstrap il n'est pas aussi évident. Sur l'envers, ce que vous avez besoin est disponible en natif Angulaire 2 bibliothèques.
La configuration de la Route de Configuration
La configuration est simple, avec une seule exception: l' [données] attribut. Vous remarquerez qu'il a une clé appelée
name
. C'est le nom de la route. Pensez-y comme un attribut de données en tant que données de-sac. Vous pouvez ajouter plus que juste le nom de la route.De la configuration de l'TabSet Balisage
Il n'y a rien de magique au-dessus de l'onglet de balisage, il ya quelques choses que vous voulez prendre note de: la première est dans le
ngb-tabset
élément, nous avons déclaré la variable#tab
. Nous allons utiliser#tab
plus tard dans le composant. Deuxièmement, chaquenbg-tab
a unid
jeu qui correspond à nom que nous avons défini dans la route de configuration (c'est à diredata:{name:'followups'}
).La configuration du Composant
La partie la plus difficile dans cet exercice a été d'obtenir l'ordre de l'exécution correcte. Si ce n'est pas correct, une collection ou une propriété de ne pas être initialisé avant d'opérer sur elle. Nous allons commencer par le premier de la classe et de travailler notre chemin vers le bas.
Tout d'abord, nous avons les variables.
prospectId
est la clé primaire de données,selectedTab
est le nom de l'onglet actuellement sélectionné, et enfin, nous avons letabs
variable.tabs
est une référence à l'attribut (#tab
), nous avons ajouté à langb-tabset
élément.Suivant est le
constructor
. Il n'est pas évident dans la documentation, maisdata
est unObservable<data>
. Pour capturer la valeur, nous vous abonnant à ladata
bien de la route.À la suite de la
constuctor
est lengOnInit
. Ce n'est pas important pour les onglets, mais il ne capture le prospectId que nous utilisons dans l'onglet routage. Si vous n'avez pas de données dynamiques dans vos itinéraires, alors vous n'avez pas besoin de cela.Enfin, nous avons
ngAfterViewChecked
. Pour le routage de latabs
, c'est le plus important. Ici, nous utilisons latabs
variable nous avons capturé à partir de la majoration, et c'est là que nous passons à l'onglet sélectionné, le nom de latabs
pour modifier l'onglet sélectionné.Mise à jour
De le faire fonctionner correctement, j'ai dû ajouter de raccordement dans le
tabChange
de l'événement sur langb-tabset
.HTML:
Tapuscrit:
Aussi, j'ai dû coder en dur les routes dans le onTabChange fonction.
Si vous utilisez l'onglet composant à l'extérieur d'un itinéraire, sens le composant n'est pas directement partie de l'itinéraire, l'itinéraire paramètre est null. Vous aurez besoin de masser le code ci-dessous pour le faire fonctionner, mais il va vous donner l'accès aux données dont vous avez besoin. `` // Nous faisons de cette façon, parce que le composant n'est pas partie d'un // route. Il vit à l'extérieur de la route/activatedRoute hiérarchie. c'.routeur.les événements.abonnez-vous(val => { if (val instanceof RoutesRecognized) { let q = val.état.de la racine.firstChild.params['query']; ce.texterecherché = q; }}); ``
doit être sélectionné en réponse
OriginalL'auteur Chuck Conway
Au cas où quelqu'un veut le faire à partir du modèle, la meilleure approche est la suivante :
OriginalL'auteur Adrita Sharma
Ce qui se passe parce que vous appelez sélectionnez sur les onglets avant de les onglets ont même été initialisé. NgTabset sont initialisés après le point de vue a été init. J'ai utilisé un booléen pour voir si elles ont été initialisées avant d'appeler le sélectionner.
en fait, je prends mes paroles, besoin
#tab
sur le ngb-tabsets tag il se lie vers les DOM.OriginalL'auteur hnameer-GRIT
Mettre une référence sur l'élément
Utiliser un ViewChild pour contrôler l'onglet
J'ai déménagé l'exécution de la sélection d'un ensemble pour être sûr que la page s'affiche correctement créé les onglets component et il peut être référencé et utilisé.
<ngb-tabset #tabSet>
@ViewChild('tabSet') tabset: NgbTabset; constructor ( console.info("tabset",this.tabset); ...
mais tabset est toujours pas défini ?OriginalL'auteur misha130