Как хранить константы в Angular 2+?

Это дополнительный вопрос к ранее опубликованному вопросу.

Мой вопрос касался странного вывода журнала, который я получал при вызове метода в службе. console.log на выходе не печатались данные, которые сервис четко определил. Как оказалось, виновник заключался в том, что при вызове метода службы используемый контекст является контекстом компонента, выполняющего вызов.

Итак, мой вопрос: как правильно хранить переменные для нескольких компонентов в Angular 2+?

Например, скажем, я хотел сохранить переменную isLoggedIn, Где я могу хранить эту переменную? Я не могу держать его в службе, потому что, когда компоненты вызывают эту службу (т.е. authService.getLoggedInStatus()) они не обязательно получат isLoggedIn ценность сервиса, а скорее, потенциально идентичной переменной в компоненте.

Так как же вы отслеживаете общие переменные в Angular?

2 ответа

Если вы хотите сохранить глобальную переменную isLoggedIn доступны в любом месте приложения, помещая его в @Injectable service как одноразовая услуга полностью действительна. Чтобы убедиться, что это одноэлементный сервис, вы должны объявить его только в app.modules, например:

import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';
import { SingletonService } from './Singleton.service';

@NgModule({
 declarations: [
    AppComponent,
 ],
 imports: [
    BrowserModule,
    FormsModule
 ],
 providers: [SingletonService],
 bootstrap: [AppComponent]
})
export class AppModule { }

Если вы также добавите его в компоненты через:

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

Вы инициализируете новый экземпляр Сервиса и ваш предполагаемый глобальный isLoggedIn будет иметь свой собственный экземпляр в этом компоненте.

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

Более подробная информация о внедрении зависимостей здесь.

@ Инъекционные услуги одноразовые. Вы предоставляете эту услугу в соответствующем модуле, на котором объявлены компоненты. Через внедрение зависимостей этого сервиса в подчиненные компоненты вы можете получить доступ к его общедоступным свойствам. Таким образом, вы можете поделиться этими свойствами и их значениями

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