Проблема с доступом к значениям из объекта 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 ... ndex-signa
Ответить

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

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

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

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

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