angular - BreakpointObserver 未触发

标签 angular observable breakpoints

我已经按如下方式设置了 BreakpointObserver,但是当我的页面加载时它似乎没有触发。我的页面始终处于移动方向。我该如何修复它?

home.component.ts

import { Component, OnInit } from '@angular/core';
import { Breakpoints, BreakpointState, BreakpointObserver } from '@angular/cdk/layout';
import { Observable } from 'rxjs';

@Component({
  templateUrl: './home.component.html'
})
export class HomeComponent implements OnInit {
  isMobile: Observable<BreakpointState> = this.breakpointObserver.observe(Breakpoints.Handset);

  constructor(private breakpointObserver: BreakpointObserver) { }

  ngOnInit() {
  }
}

home.component.html

<div *ngIf="!isMobile | async">is not mobile</div>

<div *ngIf="isMobile | async">is mobile</div>

最佳答案

由于 isMobile 是一个 Observable ,它将解包成如下所示的值:

{
  "matches": true,
  "breakpoints": {
    "(max-width: 599px) and (orientation: portrait)": true,
    "(max-width: 959px) and (orientation: landscape)": false
  }
}

在它之前放置一个 ! 始终会使 *ngIf 为 false

但是,解包的对象将具有 matches 属性,该属性是一个 boolean。所以你可以使用它。

试试这个:

<div *ngIf="!(isMobile | async)?.matches">is not mobile</div>

<div *ngIf="(isMobile | async)?.matches">is mobile</div>

此外,更改您的 HomeComponent 实现以在 ngOnInit 中初始化 isMobile,因为这是常见的做法:

export class HomeComponent {
  isMobile: Observable<BreakpointState>;

  constructor(private breakpointObserver: BreakpointObserver) { }

  ngOnInit() {
    this.isMobile = this.breakpointObserver.observe(Breakpoints.Handset);
  }

}

这是一个Sample StackBlitz供您引用。

关于angular - BreakpointObserver 未触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52793119/

相关文章:

angular - Ionic 3如何过滤嵌套在2 *ngFor中的数组?

javascript - Chart.js 简单折线图

java - Realm 实例已经关闭,无法使用

eclipse - 使用 Eclipse 调试功能(断点等)进行 Dropwizard 服务器开发

debugging - 硬件断点和软件断点有什么区别?

angular - 错误 : Unexpected value 'undefined' exported by the module 'DynamicFormModule'

angular - 如何在页面加载时触发 Toast?

javascript - KnockoutJS 无法将输入字段设置为 false 值

Angular 6 将项目添加到 Observable

ios - 中断无法识别的选择器