Поле класса динамического создания в 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"
    }
}

Вы должны позаботиться, однако, это означает, что вы можете неправильно указывать имена свойств, и компилятор не выдаст никакой ошибки.

Другие вопросы по тегам