【问题标题】:Angular 7 go offline?Angular 7 下线了?
【发布时间】:2019-07-05 14:59:26
【问题描述】:

我需要关闭所有按钮点击超链接,并放置一个带有消息的背景“上网”。我知道这有点粗鲁,但这是必要的。

AppComponent (TS):可以订阅connectionMonitor来观察网络连通性。

  private onlineObserver(){
    if (isPlatformBrowser(this.platformId)) {
      const offline$ = fromEvent(window, 'offline').pipe(mapTo(false));
      const online$ = fromEvent(window, 'online').pipe(mapTo(true));
      this.connectionMonitor = merge( offline$, online$ );
    } else {
      this.connectionMonitor = empty();
    }
  }

app.component.html:只是整个路由器插座。

<router-outlet></router-outlet>

如何使用 Angular 7 实现这一点?

【问题讨论】:

    标签: javascript angular typescript rxjs


    【解决方案1】:

    您可以将路由器插座上的在线标志与 ngIf 一起使用

    <router-outlet *ngIf="online$ | async else offline"></router-outlet>
    <ng-template #offline>
      content here displays when not online
    </ng-template>
    

    <router-outlet *ngIf="online$ | async"></router-outlet>
    <ng-container *ngIf="offline$ | async">
      content here displays when offline
    </ng-container>
    

    【讨论】:

    • 您的 ngIf 解决方案有问题。这将触发不必要的生命周期钩子。另外,这将是一个渲染开销。
    • 垃圾,ngIfs 在所有 Angular 应用程序中都使用。
    【解决方案2】:

    ngIf="offline$ | async

    ngIf="online$ | async

    如果您仍需要显示控件但让它们处于非活动状态,您可以使用ng-template 根据您是否离线加载不同的模板。离线元素没有绑定点击事件,没有hrefs,没有指针事件等。这个问题非常广泛,因此很难根据您提供的信息深入了解您的用例的更多细节。

    【讨论】:

    • 您的 ngIf 解决方案有问题。这将触发不必要的生命周期钩子。另外,这将是一个渲染开销。
    • @AbhijitSrivastava 请详细说明原因
    • 因为他不明白他在说什么,所以 ngIf 是 Angular 模板开发的面包。
    • @AdrianBrand 我的目标是采用更苏格拉底式的教学方式;)
    • 嗯,像这样的声明,ngIf 是一个渲染开销,需要放在它的位置。
    猜你喜欢
    • 2019-05-15
    • 2020-05-31
    • 1970-01-01
    • 2020-02-02
    • 2019-05-15
    • 2021-07-08
    • 2019-05-12
    • 2010-12-27
    • 1970-01-01
    相关资源
    最近更新 更多