我有一个添加不同的字段(我添加新的控件,因为只是使用*ngIf将它们从模板中隐藏起来,因此不会从表单中将它们排除,因此导致表单无效)基于select选项中的选定选项.我正在使用Angular2中的表单的addControl方法向可用表单添加新控件.控件正在正确添加,但我不知道为什么这些添加的控件的值在用户输入后没有更新.以下是我向表单添加新控件的方法:
signUpForm: ControlGroup;
constructor(private fb: FormBuilder) { }
ngOnInit(): void {
this.signUpForm = this.fb.group({
firstName: ["", Validators.required],
lastName: ["", Validators.required],
group: ["", Validators.required]
});
}
modifyControls(selectedGroup): number {
if (selectedGroup == 1) {
if (this.signUpForm.contains("studentID")) {
this.signUpForm.removeControl("studentID");
}
this.signUpForm.addControl("teacherCode", new Control("", Validators.required));//need some custome validations
this.signUpForm.addControl("teacherID", new Control("", Validators.required));
return 1;
}
else if (selectedGroup == 2) {
if (this.signUpForm.contains("teacherCode")) {
this.signUpForm.removeControl("teacherCode");
this.signUpForm.removeControl("teacherID");
}
this.signUpForm.addControl("studentID", new Control("", Validators.required));
return 2;
}
}
Run Code Online (Sandbox Code Playgroud)
看起来角度不能识别那些新的领域.我认为它与AbstractControl有关,但文档缺乏这一点.以下是问题的快照,即动态添加的控件未被角度拾取.

为了显示问题,我在下面的plunker中创建了一个简单的例子(请转到版本2来复制此问题).
https://plnkr.co/edit/RI4JL4Pnf2LrJ3TsxsSt?p=preview
我做错了什么以及如何使其适用于当前的设置?实现相同行为的其他选择有哪些?
谢谢您的帮助
解决方法:
modifyControls(selectedGroup) { …Run Code Online (Sandbox Code Playgroud) 我正在为我的应用程序使用来自primeng 的菜单栏。我显示了菜单,但我无法使路由在我的应用程序中工作。我设置了特定链接的路由说“reports/89”,但是当我单击与链接对应的菜单时,它会尝试转到“localhost:3000/r/e/p/o/r/t/s/8/9” "这显然不存在。我检查了包含我的菜单的项目对象,并且 routerLink 正确指向“reports/89”。这里发生了什么以及为什么primeng在链接中的每个字符之间放置/。我的代码很简单:私人项目:MenuItem[] = []; 用项目、标签和路由器链接填充项目数组。
this.items = [
{
"label": "Lookup",
"routerLink": "/reports/79"
},
{
"label": "Reports",
"routerLink": "/reports/89",
"items": [
{
"label": "Lab Results",
"routerLink": "/reports/3"
},
{
"label": "test Results",
"routerLink": "/reports/4"
}
]
Run Code Online (Sandbox Code Playgroud)
所有菜单都正确显示,但我注意到由primeng 为菜单项构建的span 元素的href 设置为“#”。这可能是问题所在,但不知道为什么会这样设置,因为我提供了自己的 routerLinks。
我没有在我的组件中进行任何路由,我认为所有这些都将在 Primeng 中完成。
感谢您的帮助