如何将HTTP请求中的布尔值发送到组件?(角度)

时间:2019-09-16 10:09:08

标签: angular rxjs angular-httpclient

我用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);

2 个答案:

答案 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()中的下一部分。