我用Angular 7创建了一个程序,我想以boolean捕获http请求并将其传输到组件。我试图将BehaviourSubject与next一起使用。因此,在这两个函数checkin()和checkOut()中,布尔值必须为true。我附上了代码。我将不胜感激任何帮助。谢谢!
for
let list1 = [4, 2, 3, 1];
let list = [
{ id: 1, type: 2 },
{ id: 2, type: 4 },
{ id: 3, type: 2 },
{ id: 4, type: 1 },
{ id: 5, type: 2 },
{ id: 6, type: 3 }
];
let orderedList = [];
for (let i = 0; i < list1.length; i++) {
for (let j = 0; j < list.length; j++) {
if (list1[i] == list[j].type) {
orderedList.push(list[j]);
}
}
}
console.log(orderedList);
答案 0 :(得分:1)
尝试一下: 在您的component.ts中:
ngOnInit() {
this.subscriptionBlockUI = this.httpLoadingInterceptor.blockUIState.subscribe((blockUIValue: boolean) => {
this.blockUIState = blockUIValue;
});
}
答案 1 :(得分:1)
好的,如果您没有获得值,可能是您希望通过BehaviorSubject将blockUIState
设为Observable。
在service.ts
public blockUIState = new BehaviorSubject<boolean>(false);
blockUIState$ = this.blockUIState.asObservable();
在component.ts
中 ngOnInit() {
this.subscriptionBlockUI = this.httpLoadingInterceptor.blockUIState$.subscribe((blockUIValue: boolean) => {
this.blockUIState = blockUIValue;
});
}
编辑:以前的更正无效。 尝试设置调试器</ p>
intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
if (req.headers.has(HEADER_LOADING)) {
return next.handle(req);
}
debugger;
this.checkin();
return next.handle(req).pipe(finalize(() => this.checkOut()));
}
因为checkin()仅在本节中被调用。请尝试。
编辑:请从if子句中删除next.handle(req)
。该代码现在应该是:
if (req.headers.has(HEADER_LOADING)) {
// return next.handle(req);
}
this.checkin();
return next.handle(req).pipe(finalize(() => this.checkOut()));
因为当条件为true时,它将返回并且不会调用`this.checkin()中的下一部分。