【问题标题】:Hide header on specif route - angular 6隐藏特定路线上的标题 - 角度 6
【发布时间】:2019-02-28 02:11:19
【问题描述】:

我正在尝试隐藏标题,仅在一条路线中。

假设我有 3 条路线,route1route2route3

我有一个名为 app-header 的组件。

我希望在用户输入 route1 时隐藏组件 app-header,并在其他 2 条路线中显示此组件。

我在 stackoverflow 上找到了一些主题,但没有一个对我有帮助 =/

你们能给我一些帮助吗?

这是我的代码:

  • app.component.ts

    export class AppComponent implements OnInit {
        showHeader = true;
    
        constructor(
            private router: Router
        ) {
            this.router.events.subscribe(event => this.modifyHeader(event));
        }
    
        ngOnInit() {
        }
    
        modifyHeader(location) { // This method is called many times
            console.log(location.url); // This prints a loot of routes on console
            if (location.url === '/route1') {
                this.showHeader = false;
            } else {
                this.showHeader = true;
            }
        }
    }
    
    • app.component.html

      <app-header *ngIf="showHeader"></app-header>
      <router-outlet></router-outlet>
      

我正在使用角度 6.1.4

【问题讨论】:

标签: angular typescript angular6


【解决方案1】:

由于您知道要检测哪个路由,并且似乎在应用程序组件中有解决方案,我建议过滤路由器事件,如下所示:

export class AppComponent implements OnInit {
    showHeader = true;

    constructor(
        private router: Router
    ) {
        this.router.events.pipe(
            filter(e => e instanceOf NavigationEnd)
        ).subscribe(event => this.modifyHeader(event));
    }

    ngOnInit() {
    }

    modifyHeader(location) { // This method is called many times
        console.log(location.url); // This prints a loot of routes on console
        if (location.url === '/route1') {
            this.showHeader = false;
        } else {
            this.showHeader = true;
        }
    }
}

【讨论】:

  • 谢谢Arne,这个解决方案有效,我只需要导入过滤器import { filter } from 'rxjs/operators';
【解决方案2】:

在路由器插座上添加功能

<router-outlet  (activate)="modifyHeader()"></router-outlet>

在你的构造函数中

router; 
constructor(private _router: Router ) {
      this.router = _router;
    }

你的 modifyHeader 函数

modifyHeader() { // This method is called many times
        console.log(this.router.ur); // This prints a loot of routes on console
        if (this.router.ur === '/route1') {
            this.showHeader = false;
        } else {
            this.showHeader = true;
        }
    }

如果您遇到任何问题,请告诉我。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-29
    • 1970-01-01
    • 2018-05-22
    • 2021-08-02
    • 2018-11-24
    • 2018-11-19
    相关资源
    最近更新 更多