Не знакомый с углом, не могу обернуться вокруг доступа к переменным снаружи компонента - PullRequest
0 голосов
/ 30 ноября 2018

Хорошо, позвольте мне попытаться обобщить как можно лучше.Я новичок в Angular, довольно тщательно искал, но, похоже, не могу найти ответ на мою проблему:

Сейчас у меня есть: Api.Service.ts

import { Injectable } from '@angular/core';
import { HttpClient, HttpHeaders } from '@angular/common/http';
import { Observable } from 'rxjs';


const httpOptions = {
  headers: new HttpHeaders({
    'Accept': 'application/json',
    'Content-Type': 'application/json'
  })
};

@Injectable({ providedIn: 'root' })

export class TokenService {
  private tokenUrl = 'http://urlofapi/auth/token';

  constructor(private http: HttpClient) { }

  addToken(): Observable<any> {
    return this.http.post(this.tokenUrl, httpOptions);
  }

}

api.component.ts

import { Component, OnInit } from '@angular/core';
import { TokenService } from '../api.service';

@Component({
  selector: 'app-api',
  templateUrl: './api.component.html',
  styleUrls: ['./api.component.scss']
})

export class ApiComponent implements OnInit {

  constructor(private tokenService: TokenService) { }

  ngOnInit() {
    this.tokenService.addToken().subscribe((data => {
      this.data = data;
      const finalToken = this.data['token'];

      console.log(finalToken);
    });

  }
}

Токен возвращается из API через рукопожатие POST.Он возвращается в формате:

{
  "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJVVUlEIjoiYTM3YWFmNzAtZjU0Yy00MGMwLWEwZGUtOTE4NTBkNjY1ODI2IiwiZGV2aWNlSWQiOiIxMjIzMzMiLCJleHBpcmVzQXQiOiIyMDE4LTExLTI5VDIwOjI4OjM3WiJ9.VcTt_TJWFA58iBCDS0JnTAJkH9EzU15QES9k0vI84Ic"
}

Я записываю токен на консоль, поэтому я знаю, что он определяет и получает его.

Итак, моя проблема Я получаю токен, он устанавливается как finalToken, он регистрируется на консоли.Проблема в том, что по какой-то причине эта переменная не видна никому из остальных приложений

, поэтому, если я попытаюсь вызвать ее из любого места за пределами оболочки ngOnInit () {}, она вернется как неопределенная.

Например, если я хочу напечатать его на экране в моем api.component.html, используя:

{{finalToken}}

в браузере, я получаю:
<p _ngcontent-c1=""></p>

без ошибок, но переменная не тянет

ТАК ОЧЕНЬ tl: dr;Можно ли сделать const finalToken доступным во всем мире?Мне нужно будет иметь возможность отправить его в заголовке любых дополнительных запросов к API, но сейчас я даже не могу получить к нему доступ в HTML компонента, в котором он находится

1 Ответ

0 голосов
/ 30 ноября 2018

Вы на самом деле не хотите делать его глобально доступным как переменную - оставьте его в сервисе и вставьте его туда, где вы хотите (как вы уже делаете).Это позволит улучшить инкапсуляцию данных в будущем.

Чтобы получить доступ к нему в html-компоненте, необходимо создать для него свойство public.Поэтому вместо:

ngOnInit() {
    this.tokenService.addToken().subscribe((data => {
      this.data = data;
      const finalToken = this.data['token'];

      console.log(finalToken);
    });

  }

Сделайте следующее:

public finalToken: string = null;
ngOnInit() {
    this.tokenService.addToken().subscribe((data => {
      this.data = data;
      this.finalToken = this.data['token'];

      console.log(finalToken);
    });

  }

Ваш HTML {{ finalToken }} не нужно менять.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...