Я много борюсь с Angular 4 (для меня он довольно новый)...
Моя проблема:
У меня есть форма, и в этой форме пользователь может добавить несколько новых полей (когда он нажимает кнопку) - и это может быть любое количество полей. Для этого я генерирую новый компонент в компоненте формы (при каждом клике).
у меня в тс:
export class FormComponent {
@ViewChild('container', {read: ViewContainerRef}) container:ViewContainerRef;
// this fires on click of the use which wants to add some fields
public addComponent() {
@Component({templateUrl: './pathToHtml'})
class TemplateComponent {}
@NgModule({declarations: [TemplateComponent], imports: [CommonModule, FormsModule]})
class TemplateModule {}
const mod = this.compiler.compileModuleAndAllComponentsSync(TemplateModule);
const factory = mod.componentFactories.find((comp) =>
comp.componentType === TemplateComponent
);
const component = this.container.createComponent(factory);
}
}
В html у меня есть отдельные шаблоны для каждого компонента - компонента FORM и компонента TEMPLATE.
Образец из формы:
<form action="" (ngSubmit)="save(configHeadersForm.form)" #configHeadersForm="ngForm">
<input type="text" class="form-control" name="test" ngModel required/>
</form>
Образец из шаблона:
<input type="text" name="test2" ngModel>
В классе формы в функции save (которая срабатывает при отправке и должна иметь данные формы), если я печатаю form.value (я помещаю в поля ввода «asddffd»), у меня есть:
Object { "test": 'asddffd'}
Таким образом, только значение из шаблона FORM, а не значение из сгенерированного компонента (test2). Есть идеи, пожалуйста? :)