Доступ к значениям из объекта Angular, определенного с помощью индексной подписи TypeScript, с использованием скобочных Javascript

Форум по Javascript
Ответить
Anonymous
 Доступ к значениям из объекта Angular, определенного с помощью индексной подписи TypeScript, с использованием скобочных

Сообщение Anonymous »

У меня возникли проблемы с доступом к переменным среды в Angular. Чего я пытаюсь достичь, так это объединить значения конфигурации, поступающие с бэкэнда/сервера, с конфигурацией внешнего интерфейса. Вот фрагменты кода:
ШАГ 1: Конфигурация среды

Код: Выделить всё

    @Injectable({
providedIn: "root"
})
export class EnvironmentConfiguration {
public production = false;
[key: string]: unknown;
}
ШАГ 2: Environment.ts

Код: Выделить всё

export const environmentConfiguration: EnvironmentConfiguration = {
production: false,
// Adding extra key-value pairs to the config
enableAuthentication: true,
enableSSO: false
}
ШАГ 3: EnvironmentConfigurationService
Эта функция инициализации службы вызывается во время запуска приложения для добавления дополнительной информации с сервера в объект среды

Код: Выделить всё

@Injectable({
providedIn: 'root'
})
export class EnvironmentConfigurationService {
private informationService = inject(InformationService);
private environment: EnvironmentConfiguration = new EnvironmentConfiguration();

get Environment(): EnvironmentConfiguration {
return this.environment;
}

public initializeEnvironment(angularConfig: EnvironmentConfiguration): Promise {
this.environment = angularConfig;
this.informationService.getInformation().pipe(finalize(() => resolve())).subscribe({
next: result => {
// Here am adding extra info from the server to the environment object
this.environment['shelf'] = result.shelf?.id;
this.environment['table'] = result.table?.id;
this.environment['carpet'] = result.carpet?.id;
},
error: err =>
this.logger.error('Problem loading application info', err);

complete: () => this.logger.debug('Merging info with Angular environment config')
});
}
}
ШАГ 4. Функция инициализации приложения.
Этот метод вызывается во время запуска приложения Angular (вызывается из app.config.ts). Параметром «environmentConfig» будет константная переменная «environmentConfiguration», определенная на шаге 2 (из файла Environment.ts), чтобы к ней можно было добавлять дополнительные данные с сервера.

Код: Выделить всё

export function provideEnvironmentConfig(environmentConfig: EnvironmentConfig): EnvironmentProviders {
return makeEnvironmentProviders([
provideAppInitializer(() => {
const environmentConfigurationService = inject(EnvironmentConfigurationService);
return environmentConfigService.initEnvironment(environmentConfig)
})
]);
}
ШАГ 5
Я добавляю EnvironmentConfigurationService в службу меню, чтобы иметь доступ к объекту среды, чтобы я мог получить доступ к информации о конфигурации, добавленной с бэкэнда/сервера

Код: Выделить всё

@Injectable({
providedIn: 'root'
})
export class MenuService {
private environmentConfigurationService = inject(EnvironmentConfigurationService);

// In this method I want to have access to the values added to the environment object from the server. When I log the whole object I see that values from the server are present but when I try to extract a specific value using the bracket notation I get undefined, very weird behavior I don't understand.
processMenu() {
const config = this.environmentConfigurationService.EnvironmentConfig;
console.log(config) // displays the whole object including values from the server
const shelf = config['shelf'];
console.log(shelf) // displays undefined
}
}
Что я делаю не так?

Подробнее здесь: https://stackoverflow.com/questions/797 ... nature-usi
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Javascript»