Поле класса динамического создания в ngOnInit() в Angular
Я пытаюсь динамически создавать переменные в классе для хранения значений и использовать его в ngModel и других местах. Я знаю, что я могу присвоить значение переменным в ngOnInit(), как это
export class Component implements OnInit{
name: string;
ngOnInit(){
this.name = 'John Doe';
}
}
Но у меня есть проблема - я получаю свои поля из серверного API и не знаю, что и сколько я получу. Я могу только проанализировать ответ сервера и присвоить значение новым переменным после его получения.
Я не могу сделать это так (TS2540: Невозможно присвоить имя, потому что это свойство константы или только для чтения.)
export class Component implements OnInit{
ngOnInit(){
name = 'John Doe';
}
}
Как я могу назначить новые поля для моего класса в ngOnInit() или, возможно, в другом месте? (Я думаю, что я могу сделать это в конструкторе, но документация говорит, что я не должен использовать это с Observable вызовом API и других сложных вещей)
2 ответа
Вы можете использовать что-то подобное для этого:
ngOnInit() {
this['prop'] = 'value';
}
Вот ссылка на рабочий пример: https://stackblitz.com/edit/dynamic-class-props
Вы можете добавить индексатор к классу, чтобы иметь возможность использовать любое имя свойства и не получать ошибку компилятора:
export class Component {
[name: string]: any;
ngOnInit(){
this["name"] = 'John Doe';
this.nameaa = "dd"
}
}
Вы должны позаботиться, однако, это означает, что вы можете неправильно указывать имена свойств, и компилятор не выдаст никакой ошибки.