所以我正在尝试在Angular2(和NativeScript)中构建一个动态表单。
现在我想“提交”表格。为此,我想我可以简单地使用ViewContainerRef并获取它的“兄弟姐妹”(它们是基于之前提到的JSON动态创建的)并循环遍历它们并创建一个JSON对象来发布这个..但我不明白Angular2 DOM如何工作..
这是我到目前为止的(部分)代码:
添加组件功能
//... class DynamicComponent, has id and value properties
public addComponent(container: ViewContainerRef, template: string){
@Component({template: template})
class TemplateComponent{
public value = "test";
}
@NgModule({declarations: [TemplateComponent]})
class TemplateModule {}
const mod = this.compiler.compileModuleAndAllComponentsSync(TemplateModule);
const factory = mod.componentFactories.filter((comp)=>
comp.componentType === TemplateComponent
);
const component = container.createComponent(factory[0]);
return TemplateComponent;
}
创建组件
@ViewChild("container",{ read: ViewContainerRef }) container : ViewContainerRef;
..
//foreach JSON element
let _component = <any>
this._dynamicComponent.addComponent(
this.container, elementObject.render()
);
//the render() returns things like : `<Label text="foo"></Label>`
..
_component.prototype.onTap = () => {
this.submit();
}
提交功能
submit(){
let json=[];
for(let i=0;i<this.container.length;i++){
let component = this.container.get(i);
//Ideally I want to do this:
/*
json.push({
id:component.id,
val:component.value
});
*/
}
}
基本上,我在提交函数中将“component”作为ViewRef对象,但是如何从那里继续?
另外,我对Angular2很新,所以这是正确的方法吗?我已经看过表单生成器,但我没有让它与动态创建的元素一起正常工作..