首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >mat-sidenav内容的渲染组件

mat-sidenav内容的渲染组件
EN

Stack Overflow用户
提问于 2019-01-07 19:19:36
回答 1查看 3.5K关注 0票数 0

我用以下HTML模板创建了一个棱角材料sidenav:

代码语言:javascript
复制
<mat-sidenav-container>
<mat-sidenav>
 <!--menu component added here-->
</mat-sidenav>

<mat-sidenav-content>
  <app-home></app-home>
  <router-outlet></router-outlet>
</mat-sidenav-content>
</mat-sidenav-container>

当第一次加载模板时,将呈现app-home组件。当一个菜单项被选中时,相关的组件将呈现在mat组件中,但是app-home仍然会出现。当菜单项被选中时,我能隐藏它吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-01-08 10:46:42

由于我对te问题的误解,我做了最后一次编辑。

作为介绍信息:方法是相同的,如果你是使用安圭拉或角质材料。

编辑:在这里你可以看到同样的方法应用于角质材料:堆栈闪电战示例

原件:是的菜单组件必须向页面容器发送一个带有eventEmitterboolean输入,所以当页面加载后,输入的默认状态是true,当单击菜单项时,输入状态将更改为falseapp-home将被隐藏。

您的页面容器(或sidenav主组件)如下所示

代码语言:javascript
复制
// Imports omitted
@Component({
  selector: 'page-container',
  template: `
  <mat-sidenav-container>
    <mat-sidenav opened mode="side">Lorem ipsum</mat-sidenav>
      <mat-sidenav-content>
         <menu-component (show)="show($event)" (hide)="hide($event)"></menu-component>
      </mat-sidenav-content>
      <mat-sidenav-content>
         <app-home [toggle]="visible"></app-home>
      </mat-sidenav-content>
  </mat-sidenav-container>`
  })

export class PageContainerPage {

    visible: boolean;

    show(event: boolean) {
      this.visible = event;
    }

    hide(event: boolean) {
      this.visible = event;
    }

}

您的菜单组件将如下所示-在这里使用事件发射器输出

代码语言:javascript
复制
// Imports omitted
@Component({
  selector: 'menu',
  template: `
      <ul>
        <li (click)="showElement()">menu item 1</li>
        <li (click)="hideElement()">menu item 2</li>
      </ul>`
})

export class MenuComponent {
    showHideBoolean: boolean; // Just delete default value

    // Output to send
    @Output() show: EventEmitter<Boolean> = new EventEmitter<Boolean>();
    @Output() hide: EventEmitter<Boolean> = new EventEmitter<Boolean>();

    showHideElement(){
      console.log('you have click on a menu item')
      this.showHideBoolean = !this.showHideBoolean;

      if (this.showHideBoolean) {
         this.show.emit(true);
         console.log('value to send: ', this.showHideBoolean) 
      } else {
         this.hide.emit(false);
         console.log('value to send: ', this.showHideBoolean) 
      }
    }
}

您的应用程序-home组件将在这里使用输入

代码语言:javascript
复制
@Component({
  selector: 'app-home',
  template: `
    <div [hidden]="toggle">I'm the first element</div>
    <div [ngClass]="{'color-red' : toggle}">I'm the second element!</div>
    <div *ngIf="toggle">I'm an element too!</div>`
})

export class AppHomeComponent {

    // Use @Import here
    @Input() toggle: Boolean; // Just remove the default value

}    
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54080494

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档