Передайте значение из компонента в службу и обновите переменную в службе с новым значением, полученным из компонента

У меня есть компонент входа. После того, как appId для входа в систему установлен в локальном хранилище, также необходимо обновить объект AppId службы. Служба содержит ключ заголовка «AppId», значение этого AppId берется из компонента входа в систему или локального хранилища.

@Injectable({
  providedIn: 'root'
})
export class WebconfigService {
baseUrl = "https://localhost:44330/api/";
AppId = ""
    constructor(private http: HttpClient,){
      this.httpOptions = {
        headers: new HttpHeaders({
          'Content-Type':  'application/json',
          "Accept": "application/json",
          'AppId' :This.AppId
        })
      };
    }
    get(path: string,): Observable<any> {
       return this.http.get(this.baseUrl+path, this.httpOptions)
        .pipe(catchError(this.formatErrors));
    }

    SetTokenFromLogin(appId){
       this.AppId=appId
    }
}

После авторизации AppId не переходит в сервис. Из метода входа в систему я передаю значение следующим образом.

this.authService.LoginUser(LoginForm.value).subscribe((data)=>
      { this.webConfigService.SetTokenFromLogin(data["data"]["user"]["appId"])
})

Кажется, что this.webConfigService.SetTokenFromLogin(this.token,data["dat‌​a"]["user"]["appId"]‌​) передает token методу, а не appId

Ethan Vu 12.07.2019 21:32

Я не понимаю, как это может быть скомпилировано, если сервис не набран как any. This также является недействительным кодом TypeScript.

JB Nizet 12.07.2019 21:37
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Angular и React для вашего проекта веб-разработки?
Angular и React для вашего проекта веб-разработки?
Когда дело доходит до веб-разработки, выбор правильного front-end фреймворка имеет решающее значение. Angular и React - два самых популярных...
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Мы провели Twitter Space, обсудив несколько проблем, связанных с последними дополнениями в Angular. Также прошла Angular Tiny Conf с 25 докладами.
Угловой продивер
Угловой продивер
Оригинал этой статьи на турецком языке. ChatGPT используется только для перевода на английский язык.
Мое недавнее углубление в Angular
Мое недавнее углубление в Angular
Недавно я провел некоторое время, изучая фреймворк Angular, и я хотел поделиться своим опытом со всеми вами. Как человек, который любит глубоко...
Освоение Observables и Subjects в Rxjs:
Освоение Observables и Subjects в Rxjs:
Давайте начнем с основ и постепенно перейдем к более продвинутым концепциям в RxJS в Angular
0
2
47
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

По-видимому, функция внутри subcribe() показывает, что она передает token в вашем компоненте в свойство AppId службы.

Исправьте это по:

this.authService.LoginUser(LoginForm.value).subscribe((data)=>{
   this.webConfigService.SetTokenFromLogin(data["data"]["user"]["appId"]);
})

Обновление:

Как я вижу, вы устанавливаете свой HttpOptions внутри contructor, который оценивается только один раз при запуске службы. Это означает, что свойство AppId внутри вашего HttpOptions всегда имеет значение пустой строки.

Ваша логика должна устанавливать HttpOptions внутри SetTokenFromLogin() после получения ответа API.

 SetTokenFromLogin(appId){
    this.httpOptions = {
       headers: new HttpHeaders({
          'Content-Type':  'application/json',
          "Accept": "application/json",
          'AppId' :appId
       })
    };
 }

но после входа в систему следующий запрос не обновляет AppId в заголовке

samjad ps 12.07.2019 21:49

Это потому, что вы устанавливаете свой httpOptions внутри конструктора, который оценивается только один раз при запуске службы. Ваша логика должна устанавливать HttpOptions внутри SetTokenFromLogin() , а не из конструктора.

Ethan Vu 12.07.2019 21:55

Обновлен ответ

Ethan Vu 12.07.2019 22:51

Другие вопросы по теме