1 回答
TA贡献1821条经验 获得超4个赞
我认为阻止后退按钮不是一个好主意。您可以对请求使用缓存机制,这样它就不会每次都将请求发送到服务器,而是获得最新的响应。请检查这个例子:
const URL = 'https://api.punkapi.com/v2/beers';
@Injectable({
providedIn: 'root'
})
export class HttpService {
public responseCache = new Map();constructor(private http: HttpClient) {}public getBeerList(): Observable<any> {
const beersFromCache = this.responseCache.get(URL);
if (beersFromCache) {
return of(beersFromCache);
}
const response = this.http.get<any>(URL);
response.subscribe(beers => this.responseCache.set(URL, beers));
return response;
}
}
如果您仍然希望您的解决方案阻止用户返回,则需要使用 Guards 来取消导航。
@Injectable()
export class MyGuardService implements CanActivate {
constructor(public auth: AuthService, public router: Router) {}
canActivate(): boolean {
return !this.myService.stillDontWantToGoBack()
}}
这将适用于所有导航,如果您仍然只想要返回,则需要检查您要访问的 URL 是否与 previousUrl 相同。
我的服务.service.ts
previousUrl: string;
constructor(router: Router) {
router.events
.filter(event => event instanceof NavigationEnd)
.subscribe(e => {
console.log('prev:', this.previousUrl);
this.previousUrl = e.url;
});
}
在 my-guard.guard.ts
canActivate(route: ActivatedRouteSnapshot) {
return route.url !== this.myService.previousUrl;
}
添加回答
举报