Преобразовать наблюдаемое<логическое> в логическое значение
Это не дублирует это по нескольким причинам. 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.
Используя
async
труба в вашем шаблоне:<p>Am I logged In: {{ $isLoggedinSource | async }}</p>
ИЛИ ЖЕ
- От
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);
}