Tôi tìm thấy một vài thực hiện AuthGuard
sử dụng take(1)
. Trong dự án của tôi, tôi đã sử dụngfirst()
.
Cả hai làm việc theo cùng một cách?
import 'rxjs/add/operator/map';
import 'rxjs/add/operator/first';
import { Observable } from 'rxjs/Observable';
import { Injectable } from '@angular/core';
import { CanActivate, Router, ActivatedRouteSnapshot, RouterStateSnapshot } from '@angular/router';
import { AngularFire } from 'angularfire2';
@Injectable()
export class AuthGuard implements CanActivate {
constructor(private angularFire: AngularFire, private router: Router) { }
canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<boolean> | boolean {
return this.angularFire.auth.map(
(auth) => {
if (auth) {
this.router.navigate(['/dashboard']);
return false;
} else {
return true;
}
}
).first(); // Just change this to .take(1)
}
}
first()
vàtake()
nói chung là giống nhau, điều mà tôi nghĩ là hiển nhiên, chỉ có điều đófirst()
vàtake(1)
giống nhau. Tôi không chắc chắn từ câu trả lời của bạn nếu bạn nghĩ vẫn còn một sự khác biệt?