2017-01-14 7 views
4

Я хочу получить, какой из tab активен. Я попытался использовать декоратор @ViewChild и получить доступ к свойствам элемента таким образом, но он возвращает null.Как получить активную вкладку в угловом материале2

Компонент:

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

@Component({ 
    selector: 'material-app', 
    template: ` 
    <md-tab-group #tabGroup> 
     <md-tab label="Tab 1">Content 1</md-tab> 
     <md-tab label="Tab 2">Content 2</md-tab> 
    </md-tab-group> 
    ` 
}) 
export class AppComponent implements OnInit { 

    @ViewChild('tabGroup') tabGroup; 

    constructor() { 
    } 

    ngOnInit() { 
    console.log(this.tabGroup); // MdTabGroup Object 
    console.log(this.tabGroup.selectedIndex); // null 
    } 

} 

Plunker Preview

ответ

13

Ну, я не уверен, если я хорошо понял ваш вопрос, потому что, по умолчанию индекс всегда начинает отсчет с нуля если не установлено вручную [selectedIndex]property.

Во всяком случае, если вы действительно хотите, чтобы увидеть, какая вкладка выбрана на инициализации можно реализовать интерфейс AfterViewInit и выполните следующие действия:

export class AppComponent implements AfterViewInit, OnInit { 

... 

    ngAfterViewInit() { 
    console.log('afterViewInit => ', this.tabGroup.selectedIndex); 
    } 
} 

С другой стороны, если вы хотите, чтобы проверить, какая вкладка подбираются на основе изменения (что имеет смысл), здесь вы идете:

HTML:

<md-tab-group #tabGroup (selectedTabChange)="tabChanged($event)"> 
    <md-tab label="Tab 1">Content 1</md-tab> 
    <md-tab label="Tab 2">Content 2</md-tab> 
</md-tab-group> 

Компонент:

tabChanged = (tabChangeEvent: MatTabChangeEvent): void => { 
    console.log('tabChangeEvent => ', tabChangeEvent); 
    console.log('index => ', tabChangeEvent.index); 
} 

DEMO

+1

Второй случай это то, что я искал, но первый из них полезно знать тоже. Спасибо @ разработчик033! – Gabriel

+0

Привет! Я использовал этот код, и у меня есть ошибка, что «this.tabGroup» не определена. Только после onSelectChange Угловой «видеть» этот элемент dom. Это как ngAfterViewInit() не работает для меня. Вы знаете, что происходит? – Roberto

+0

Для первого варианта, как вы получите _name_ (вместо индекса) вкладки, которая автоматически выбирается при инициализации? – FiringBlanks

2

Согласно Материал документации угловыми продукции Материал язычков событие на изменение вкладки @output() selectedTabChange: EventEmitter

Ваш шаблон:

<mat-tab-group (selectedTabChange)="tabChanged($event)"> 
     <mat-tab> 
     <ng-template mat-tab-label>Tab 1</ng-template> 
     Tab Content 
     </mat-tab> 
     <mat-tab> 
     <ng-template mat-tab-label>Tab 2</ng-template> 
     Tab Content 
     </mat-tab> 
    </mat-tab-group> 

Ваш Машинопись:

import { MatTabChangeEvent } from '@angular/material'; 

public tabChanged(tabChangeEvent: MatTabChangeEvent): void { 
    console.log(tabChangeEvent); 
}