Angular 异步管道不能与主题一起工作

Angular 异步管道不能与主题一起工作,angular,rxjs,subject-observer,Angular,Rxjs,Subject Observer,我在服务中有以下行为主体: isAuthenticated = new BehaviorSubject<boolean>(false); isAuthenticated=新行为主体(false); 我在一个组件中使用它,如下所示: authenticated: Observable<boolean>; constructor(private accountService: AccountService) { } ngOnInit() { t

我在服务中有以下行为主体:

  isAuthenticated = new BehaviorSubject<boolean>(false);
isAuthenticated=新行为主体(false);
我在一个组件中使用它,如下所示:

  authenticated: Observable<boolean>;

  constructor(private accountService: AccountService) { }

  ngOnInit() {
    this.authenticated = this.accountService.isAuthenticated.asObservable();
  }
authenticated:可观察;
构造函数(私有accountService:accountService){}
恩戈尼尼特(){
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
    中的任何一个,尽管假设第一个应该出现,因为我将主体的初始值指定为false


    我做错了什么?

    我怀疑这是操作顺序-您的订阅需要括号:

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

  • 我想到了使用发布一个解决方案,这在您的特定情况下可能更直观:

  • 登录
  • 登录
    或者,您可以将这两种情况都放在
    ng模板中:

  • 登录 登录

    希望它对这里的其他人有用。

    您应该通过调用
    行为主题的
    next
    方法来设置值。
    您可以尝试将第一个表达式放入括号中,如
    !(已验证的| async)
    以确保它在可观察对象上使用的是
    async
    管道,而不是
    的结果!已验证
    @martin就是这样!谢谢大家!@Aravind,没有必要为行为主题调用
    next
    !BehaviorSubject的初始值为“false”,在您的检查中*ngIf=“authenticated”不会给你任何东西。所以,是的,它有一个值,但不是一个您的代码会发现有用的值。