Angular ngIf无法访问父级属性

时间:2018-07-13 22:32:45

标签: angular angular5 angular-material2

我正在使用Angular 5和Material 5:

<mat-tab-group>
    <mat-tab label="INFO">
        info goes here
    </mat-tab>
    <mat-tab label="CONTACTS">
        <div *ngIf="isActive">
            contacts should load here
        </div>
    </mat-tab>
</mat-tab-group>

我试图显示联系人,但仅在选项卡处于活动状态时才显示。 isActivehttps://github.com/angular/material2/blob/5.2.x/src/lib/tabs/tab.ts#L83)有mat-tab属性,但我无法访问它,它看起来不确定。

我不明白我在做什么错。

(目前我也无法使用较新版本的Angular)。

2 个答案:

答案 0 :(得分:1)

这样工作:

<mat-tab-group>
    <mat-tab label="INFO">
        info goes here
    </mat-tab>
    <mat-tab #contactsTab label="CONTACTS">
        <div *ngIf="contactsTab.isActive">
            contacts should load here
        </div>
    </mat-tab>
</mat-tab-group>

元素在没有引用的情况下无法访问任何元素的属性(Docs: Components Interactionsdiv不会被视为mat-tab的一部分,除非它是模板的一部分,即使它在模板中也是如此。

答案 1 :(得分:1)

我认为您不需要*ngIf。如果检查选项卡正文,则应该在非活动选项卡中看不到内容。

例如,在这个简单的StackBlitz中,有两个选项卡,第二个<mat-tab-body>里面什么也没有。

然后,单击另一个选项卡,然后发生相反的情况。

来源

<mat-tab-group>
  <mat-tab label="One">
    <h1>Some tab content</h1>
    <p>...One</p>
  </mat-tab>
  <mat-tab label="Two">
    <h1>Some more tab content</h1>
    <p>...Two</p>
  </mat-tab>
</mat-tab-group>

DOM检查,选项卡1处于活动状态

<div class="mat-tab-body-wrapper">
  <!--bindings={
    "ng-reflect-ng-for-of": "[object Object],[object Object"
    }-->

  <mat-tab-body class="mat-tab-body ng-tns-c5-0 mat-tab-body-active ng-star-inserted" role="tabpanel" ng-reflect-_content="[object Object]" ng-reflect-position="0" id="mat-tab-content-0-0" aria-labelledby="mat-tab-label-0-0" ng-reflect-origin="0">
    <div class="mat-tab-body-content ng-trigger ng-trigger-translateTab" style="transform: none;">
      <!---->
      <h1 class="ng-star-inserted" style="">Some tab content</h1>
      <p class="ng-star-inserted" style="">...One</p>
      <!---->
    </div>
  </mat-tab-body>

  <mat-tab-body class="mat-tab-body ng-tns-c5-1 ng-star-inserted" role="tabpanel" ng-reflect-_content="[object Object]" ng-reflect-position="1" id="mat-tab-content-0-1" aria-labelledby="mat-tab-label-0-1">
    <div class="mat-tab-body-content ng-trigger ng-trigger-translateTab" style="transform: translate3d(100%, 0px, 0px);">
      <!---->
    </div>
  </mat-tab-body>

</div>