Я пытаюсь заполнить раскрывающийся список, получив доступ к свойству массива из класса, который заключен внутри наблюдаемого.
У меня есть интерфейс, как показано ниже:
export interface IApplicationConfigurationResponse
{
settings?: Settings[] ] undefined;
}
export class ApplicationConfigurationResponse
{
settings?: Settings[] ] undefined;
}
export class Settings
{
settingId!:number;
name!:string;
}
государственное управление.service.ts:
@Injectable
export class StateManagementService
{
private subjectConfigurations = new BehaviourSubject<ApplicationConfigurationResponse>(null);
getApplicationConfigurations(){
return this.subjectSettings.asObservable().pipe(filter(k) => k!=null);
}
set saveApplicationConfiguration(state: ApplicationConfigurationResponse)
{
this.subjectConfigurations.next(state);
}
}
master.component.ts:
@Component({
selector: 'app-master',
..
..
})
export class MasterComponent implements OnInit
{
constructor(private myService: MyService,
private stateService: StateManagementService) {}
ngOnInit():void {
this.myService.getApplicationConfigurationsFromBackend().subscribe((res) ==> {
this.stateService.saveApplicationConfiguration = res;
}
}
заголовок.component.ts:
@Component({
selector: 'app-header',
..
..
})
export class HeaderComponent implements OnInit
{
applicationConfigurationResponse$ : Observable<ApplicationConfigurationResponse>();
constructor(private stateService: StateManagementService) {}
ngOnInit():void {
this.applicationConfigurationResponse$ = this.stateService.getApplicationConfigurations;
}
}
заголовок.component.html:
<div>
<select class = "dropdown">
<option *ngFor = "let setting of applicationConfigurationResponse$.settings | async" [value] = "setting.settingId">
{{ setting.name }}
</option>
</select>
</div>
Но я получаю ошибку в строке ниже:
Я не могу получить доступ к свойству, которое заключено внутри наблюдаемого.
Как я могу получить доступ к Settings[]
из ApplicationConfigurationResponse
и заполнить раскрывающийся список?
Вы, вероятно, хотите сделать: let settings of (applicationConfigurationResponse$ | async)?.settings
и затем, {{settings?.name}}
пожалуйста, поделитесь сообщением об ошибке
@julianobrasil Большое спасибо. Это сработало, но есть ли способ предварительно выбрать значение в раскрывающемся списке, которое не является первым?
@NagaSaiA Просто показывает красную волнистую строку ошибки. Не показывать точное сообщение об ошибке
Вам нужно получить доступ к наблюдаемому, подписаться на него, затем использовать свойство настроек с помощью Async Pipe, или вы можете сделать что-то вроде этого
export class HeaderComponent implements OnInit {
applicationConfigurationResponse$ :
Observable<ApplicationConfigurationResponse>();
constructor(private stateService: StateManagementService) {}
ngOnInit():void {
this.applicationConfigurationResponse$ =
this.stateService.getApplicationConfigurations;
}
get settings() {
return this.applicationConfigurationResponse$.pipe(map(res => res.settings));
}
}
и в хтмл
<div>
<select class = "dropdown">
<option *ngFor = "let setting of settings | async" [value] = "setting.settingId">
{{ setting.name }}
</option>
</select>
</div>
Проголосовал за ваши добрые усилия, чтобы помочь мне. Есть ли способ предварительно выбрать любое другое значение в раскрывающемся списке, кроме первого значения в массиве настроек?
да, в этом случае вам нужно установить атрибут значения элемента выбора в начале, или вы можете установить выбранный параметр, если вы знаете, какой из них должен быть выбран
Это просто опечатка при написании вопроса?
this.stateService.getApplicationConfigurations
(отсутствует скобка в конце метода)