Преобразовать наблюдаемое<логическое> в логическое значение

Это не дублирует это по нескольким причинам. 1. Я использую угловой 7, а не угловой 2. 2. Я использую rxjs6, а не rxjs5. У меня нет никакой выгоды в изучении этих более ранних версий, поскольку они вымерли. 3. Я спрашиваю о понятии Observable (булево), когда этот вопрос не упоминает Observable (булево)

Я создал наблюдаемое значение, которое я хочу получить из него истинным / ложным. Вот мой код в файле nav.component.ts

export class NavComponent implements OnInit {
  private $loggedin: Observable<boolean>;

  constructor( private auth: AuthenticationService){}
  ngOnInit() {
    this.$loggedin = this.auth.$isLoggedinSource;
    console.log('am i logged in ', this.$loggedin);
  }

Консольный вывод:

am i logged in Observable {_isScalar: false, source: BehaviorSubject}
               source: BehaviorSubject {_isScalar: false, observers: 
               Array(0), closed: false, isStopped: false, hasError: 
               false, …}
               _isScalar: false ...

Как я могу получить логическое, истинное / ложное значение из $loggedin?

4 ответа

Решение

Есть два способа, которыми вы можете использовать, чтобы развернуть значение Observable.

  1. Используя async труба в вашем шаблоне:

    <p>Am I logged In: {{ $isLoggedinSource | async }}</p>

ИЛИ ЖЕ

  1. От subscribeв соответствии с наблюдаемым в вашем компоненте:

import { Subscription } from 'rxjs';

...

subscription: Subscription;

...

this.subscription = this.$loggedin
  .subscribe(data => console.log('am i logged in ', data));

...

ngOnDestroy() {
  this.subscription.unsubscribe();
}

Какой использовать?

Если это $loggedin Observable повторяется, и вы используете подход 2, тогда вам придется назначить его на Subscription набрал свойство, а затем позвоните unsubscribe на это внутри ngOnDestroy,

При первом подходе вам не обязательно делать это.

Если вы не хотите подписываться, вы можете получить наблюдаемое значение, используя async а также await, но для этого нужно преобразовать Observable в `Обещание.

Что-то вроде этого:

@Component({
  selector: 'my-app',
  templateUrl: './app.component.html',
  styleUrls: ['./app.component.css']
})
export class AppComponent {
  public loggedin: boolean;
  public otherValue: boolean;

  constructor(private auth: AuthenticationService) { }

  async ngOnInit() {
    this.loggedin = await this.auth.$isLoggedinSource.toPromise();
    this.otherValue = await this.auth.$otherObservable.toPromise();
  }
}

Вы можете увидеть, как это работает в этой ссылке на стек.

Вы должны подписаться на него. Теперь вы регистрируете сам объект Observable, но вам нужно подписаться на него, чтобы, когда он будет разрешен, ваша подписка прослушала его и распечатала все, что разрешает.

Вы должны подписаться на наблюдаемые, чтобы получить данные.

this.$loggedin.subscribe((data: boolean) => { console.log('am i logged in ', data); }

Другие вопросы по тегам