angular 2 将变量从 injectable 传递到 component

angular 2 pass variable from injectable to component

我写了一个 http 拦截器来捕获来自服务器的所有 5xx 错误。这个想法是,在 app.component.html 中,我有组件(错误响应),如果出现 5xx 错误,则必须显示该组件。在拦截器中,我可以检查是否有错误。但是如何将此信息传递给 "bad-response" 组件?

我尝试创建另一个服务,它将被注入到组件中以获取变量值并注入到拦截器中以设置它,但没有成功。

app.component.html

<top-nav></top-nav>

<router-outlet></router-outlet>

<bad-response></bad-response> //need to pass info about 5xx error here

interceptor.ts

@Injectable()
export class InterceptedHttp extends Http {
  constructor(backend: ConnectionBackend, defaultOptions: RequestOptions) {
   super(backend, defaultOptions);
  }

  request(url: string | Request, options?: RequestOptionsArgs): Observable<Response> {
    return super.request(url, options);
  }

  get(url: string, options?: RequestOptionsArgs): Observable<Response> {
    super.get(url, this.getRequestOptionArgs(options)).subscribe((res: Response) => {
     // here I can get to response status code via res.status
   });
   return super.get(url, this.getRequestOptionArgs(options));
  }

  ...other code
}

不好-response.component.html

<div *ngIf="isBadResponse">
  Sorry, there are connection problems
</div>

不好-response.component.ts

import {Component, OnInit} from '@angular/core';

@Component({
  selector: 'bad-response',
  templateUrl: './bad-response.component.html'
})

export class BadResponseComponent implements OnInit {

  isBadResponse: boolean;

  constructor() {
  }

  ngOnInit() {
  }
}

我建议让您的 BadResponseComponent 从父组件获取一个输入变量,然后从那里开始做您喜欢的事情。

您可以使用 @Input 装饰器来实现。

您的 BadResponseComponent 示例如下所示:

import {Component, OnInit, Input} from '@angular/core';

@Component({
  selector: 'bad-response',
  templateUrl: './bad-response.component.html'
})

export class BadResponseComponent implements OnInit {

  @Input() isBadResponse: boolean;

  constructor() {
  }

  ngOnInit() {
  }
}

在这种情况下,您使用 BadResponseComponent 的父组件将提供 isBadResponse 布尔值,之后您可以使用它做任何您喜欢的事情。

COMPONENT INTERACTION - 这是了解更多组件交互的好资源。

发现可以通过另一个连接组件和可注入并使用 static 属性

的服务来完成