簡體   English   中英

將元素添加到mat-tab-group元素

[英]Adding elements to a mat-tab-group element

Angular 5

我想在mat-tab-group元素的標題欄中實現一個搜索欄(即選項卡名稱所在的行)

有沒有辦法在mat-tab-group元素中渲染元素(不是制表符)或圖像?

選項1

將邊距添加到mat-tab-body-wrapper類(如果無法在組件樣式表中覆蓋,則在根樣式表中覆蓋它)並使用邊距中的絕對位置擬合元素,這是簡單的方法,優點是您也可以應用材料指令。

.mat-tab-body-wrapper {
    margin-top: 60px !important;
  }

選項2

通過遵循這個方法你不能添加材料指令和setAttribute轉換為小寫,我認為可以使用命名空間解決,但你仍然不能使用數據綁定,特殊字符,如'['等與此方法。

您可以在組件視圖初始化后使用Renderer2類添加元素。 雖然你可以使用JavaScript做同樣的事情,但不推薦使用它,因為Renderer2 DOM操作將由angular處理並且不會中斷。

component.html

<mat-tab-group mat-align-tabs="center" #navigationElement>
  <mat-tab label="Tab-A">A Body</mat-tab>
  <mat-tab label="Tab-B">B Body</mat-tab>
  <mat-tab label="Tab-c">C Body</mat-tab>
</mat-tab-group>

component.ts

export class HomeNavComponent implements OnInit, OnDestroy, AfterViewInit {

  @ViewChild('navigationElement', { static: false }) navEl: any;

  constructor(private rendrer: Renderer2) { }

  ngOnInit() {
  }

  ngAfterViewInit() {


    const searchElWrapper = this.rendrer.createElement('div');

    const searchInEl = this.rendrer.createElement('input');
    this.rendrer.setAttribute(searchInEl, 'placeholder', 'Search');
    this.rendrer.addClass(searchInEl, 'searchWrapper');
    this.rendrer.appendChild(searchElWrapper, searchInEl);

    const parentEl = this.navEl._elementRef.nativeElement;
    this.rendrer.insertBefore(parentEl, searchElWrapper, parentEl.childNodes[1]);
  }

  ngOnDestroy() {

  }
}

這兩種方法都會給出以下結果,並且選項卡上的靜態搜索欄也會切換。

在此輸入圖像描述

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM