В моем проекте используются Angular 5 и Typescript. У меня проблема с моделью, много полей. Когда я отправляю форму, у меня не могут быть все поля модели. Некоторые поля модели были потеряны. Я не знаю почему. Кто-нибудь знает, в чем проблема с моим кодом, или подскажите какие-нибудь предложения, пожалуйста?
Вот мой код:
HTML:
<div class = "wrapper">
<div class = "row">
<label class = "bold">Name</lable>
<input type = "text" pInputText [(ngModel)] = "model.name" />
</div>
<div class = "row">
<label class = "bold">Email</lable>
<input type = "text" pInputText [(ngModel)] = "model.email" />
</div>
<!-- Many other fields -->
</div>
<button pButton type = "button" (click) = "onSave()" class = "bg-blue-light btn-medium" label = "Save"></button>
Модель:
export class CustomerModel {
name: string;
email: string;
// Many other fields: over 100 fields
}
Составная часть:
// Init new model
public model: CustomerModel = new CustomerModel();
// Handle save event
public onSave() {
let fields = Object.getOwnPropertyNames(this.model);
// let fields = Object.keys(this.model);
console.info(fields);
}
Я отлаживал хром, я видел, что в модели недостаточно полей, поэтому обе функции getOwnPropertyNames () и keys () не дают правильного результата. Я предполагаю, что есть проблема с моделью, имеющей много полей, потому что я могу добиться успеха с моделью, имеющей некоторые поля.





Object.getOwnPropertyNames(this.model);
или Object.keys(this.model); предоставит вам только те свойства, для которых установлен values.
Таким образом, вы не увидите в списке еще не инициализированных properties.
Проверить здесь
Если значение установлено для какого-либо свойства, в вашем случае через ngModel, то они обязательно будут отображаться с помощью Object.keys().
См. Эту демонстрацию stackblitz.com/edit/… Просто введите внутри одного из элементов и посмотрите результат на консоли.
Еще раз спасибо, проблема именно такая, как вы ответили выше. Но только в одном вы ошибаетесь: если я установлю значение null или undefined, обе функции также получат свойства.
Итак, вывод: свойства не будут перечислены, если они еще не инициализированы. Я обновил ответ.
ОК. Спасибо за отличную поддержку.
Спасибо, Амит Чигадани. Но почему отладчик Chrome также не знает о существующих полях модели?