Angular — автоматически передает имя компонента в качестве параметра в перехватчике http

#angular

#angular

Вопрос:

В приложении angular я выполняю вызовы API с использованием http-службы с перехватчиком, которые добавляют заголовки к запросу. Я ищу способ передать имя вызывающего компонента в качестве заголовка http, без необходимости добавлять его в качестве параметра при каждом вызове службы http. Например, из MyComponent:

 this.HttpService.GetSomethingName("MyComponent",SomethingID); // annoying
  

это было бы очень раздражающе
, поэтому, если бы я мог вызвать службу, например :

 this.HttpService.GetSomethingName(SomethingID); // simple
  

а затем в сервисе каким-то образом получить имя компонента было бы чище и проще

есть идеи?

Комментарии:

1. Этого трудно добиться, хотя, если вы можете извлечь имя компонента с помощью this.contstructor.name (компонента), при минимизации кода имя класса может изменить форму AppComponent на A . Также вы не можете напрямую передавать имя компонента внутри service

2. Я могу использовать свойство для хранения имени компонента или присвоить ему уникальный ключ для решения проблемы минимизации. Но все же я должен передавать этот ключ при каждом вызове службы. Этот ключ не имеет ничего общего с логикой службы, но я должен передать его на сервер для ведения журнала и проблем безопасности.

3. Я пытался решить проблему, но вы не можете действительно прочитать параметр, но, конечно, вы можете сделать что-то вроде этого stackblitz.com/edit/angular-fj2knm не могли бы вы, пожалуйста, попробовать это и дать мне знать, если это сработает?

Ответ №1:

Если ваша проблема в том, что вы вызываете GetSometingName() много раз MyComponent , то почему бы просто не создать метод, MyComponent который делает это:

 private GetSomethingName(id: SomeIdType): void {
    this.HttpService.GetSomethingName("MyComponent", SomethingID);
}
  

Но если вы хотите вызывать различные методы и добавлять аргументы для каждого из них, то я ничего не могу придумать.