异步管道无法使用Subject

时间:2018-01-18 10:44:36

标签: angular rxjs subject-observer

我在服务中有以下BehaviorSubject:

  isAuthenticated = new BehaviorSubject<boolean>(false);

我在组件中使用如下:

  authenticated: Observable<boolean>;

  constructor(private accountService: AccountService) { }

  ngOnInit() {
    this.authenticated = this.accountService.isAuthenticated.asObservable();
  }

在模板中我做了类似的事情:

  <li class="login-button" *ngIf="!authenticated | async">
    <a (click)="authenticate()">Log in</a>
  </li>
  <li *ngIf="authenticated | async">
    <a>Logged in</a>
  </li>

问题是我没有看到两个li中的任何一个,尽管假设第一个应该出现,因为我将Subject的初始值赋值为false。

我做错了什么?

2 个答案:

答案 0 :(得分:4)

我怀疑它的操作顺序 - 您需要围绕订阅括号:

<li class="login-button" *ngIf="!(authenticated | async)">

答案 1 :(得分:1)

我考虑过使用 ng-if-else 发布解决方案,在您的特定情况下,该解决方案甚至更直观:

<li class="login-button" *ngIf="(authenticated | async); else unauthenticated">
  <a>Logged in</a>
</li>
<ng-template #unauthenticated>
  <a (click)="authenticate()">Log in</a>
</ng-template>

或者,您可以将两种情况都放在ng-template:

<li class="login-button" *ngIf="(authenticated | async); then authenticated else unauthenticated"></li>
<ng-template #authenticated ><a>Logged in</a></ng-template>
<ng-template #unauthenticated><a (click)="authenticate()">Log in</a></ng-template>

希望对最终来到这里的其他人有用。