Как хранить константы в 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()
в угловых.
Более подробная информация о внедрении зависимостей здесь.
@ Инъекционные услуги одноразовые. Вы предоставляете эту услугу в соответствующем модуле, на котором объявлены компоненты. Через внедрение зависимостей этого сервиса в подчиненные компоненты вы можете получить доступ к его общедоступным свойствам. Таким образом, вы можете поделиться этими свойствами и их значениями