- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
考虑模板中的以下 formArray 摘录:
<div class="p-col-12 controls-div" formArrayName="fields">
<div
class="p-grid"
*ngFor="let item of getFieldControls(); let i = index"
[formGroupName]="i"
style="margin-top: 10px;">
<div class="p-col-8">
<!-- if string is Text -->
<input
*ngIf="string == 'Text'"
type="text"
pInputText
formControlName="control">
<!-- if string is number -->
<input
*ngIf="string == 'Number'"
type="text"
pInputText
formControlName="control">
<!-- if string is Yes/No -->
<p-toggleButton
*ngIf="string == 'Yes/No'"
onLabel="Yes"
offLabel="No"
formControlName="control"></p-toggleButton>
</div>
<div class="p-col-2">
<button
type="button"
class="btn btn-danger"
(click)="onDeleteField(i)">X</button>
</div>
</div>
</div>
我想从我的 getFieldControls() 方法中传递一个字符串,并在 *ngFor 循环中将控件绑定(bind)到正确的“控件类型”(元素)。我的问题是我尝试了 100 种不同的方法来传递这个字符串。我尝试像这样添加数据类型属性:
(<FormArray>this.itemForm.get('fields')).push(
new FormGroup({
'control': new FormControl(
{data-type: 'number', value:variable.name, disabled:true}, [Validators.required])
})
);
然后我想在模板中阅读它,如下所示:
*ngIf="item[0].control.data-type == 'text'"
但编译器提示。看来我只能传递值并禁用。后来我尝试为表单组设置一个值,也没有运气。如果我可以传递一个字符串,我就会知道将哪个控件加载到模板中的 DOM 中。我还尝试从 typescript 直接、动态地添加元素,如下所示:
<div [innerHTML]="elementToAdd"></div>
在 typescript 中
if (this.type == 'number') {
elementToAdd += '<input type="number" ...>';
}
当我这样做时,每次添加一个控件时,我都会添加 4 个或 8 个控件。在一天结束的时候,我会得到一个,让我们说模板中的“下拉列表”、值(字符串)和 *ngIf 只有下拉列表,然后绑定(bind)到它。
onAddField(id: string) {
let variable = this.variables.find(i => i.id === id);
if (variable?.control == 'Text') {
//add an Input
(<FormArray>this.itemForm.get('fields')).push(
new FormGroup({
'control': new FormControl(
{value:variable.name, disabled:true}, Validators.required)
})
);
}
if (variable?.control == 'Number') {
//add an Input
(<FormArray>this.itemForm.get('fields')).push(
new FormGroup({
'control': new FormControl(
{value:variable.name, disabled:true}, Validators.required)
})
);
}
//somewhere in the formgroup or formcontrol I want to pass a string so that I can know which form control to load, using *ngIf,in the template.
}
我像这样初始化我的表单:
this.itemForm = new FormGroup({
fields: new FormArray([])
});
要获得控件,这是我的方法:
getFieldControls() {
let controls = (this.itemForm.get('fields') as FormArray).controls;
return controls;
}
最佳答案
你可以这样做。
<div class="p-col-12 controls-div" formArrayName="fields">
<div
class="p-grid"
*ngFor="let item of getFieldControls(); let i = index"
[formGroupName]="i"
style="margin-top: 10px;">
<div class="p-col-8">
<!-- if string is Text -->
<input
*ngIf="typeList[index] == 'Text'"
type="text"
pInputText
formControlName="control">
<!-- if string is number -->
<input
*ngIf="typeList[index] == 'Number'"
type="text"
pInputText
formControlName="control">
<!-- if string is Yes/No -->
<p-toggleButton
*ngIf="typeList[index] == 'Yes/No'"
onLabel="Yes"
offLabel="No"
formControlName="control"></p-toggleButton>
</div>
<div class="p-col-2">
<button
type="button"
class="btn btn-danger"
(click)="onDeleteField(i)">X</button>
</div>
</div>
</div>
在
onAddField()
你可以这样做。因为我认为
variable
这里有点相关。
typeList: stringp[] = [];
onAddField(id: string) {
let variable = this.variables.find(i => i.id === id);
this.typeList.push(variable?.control)
if (variable?.control == 'Text') {
//add an Input
(<FormArray>this.itemForm.get('fields')).push(
new FormGroup({
'control': new FormControl(
{value:variable.name, disabled:true}, Validators.required)
})
);
}
if (variable?.control == 'Number') {
//add an Input
(<FormArray>this.itemForm.get('fields')).push(
new FormGroup({
'control': new FormControl(
{value:variable.name, disabled:true}, Validators.required)
})
);
}
//somewhere in the formgroup or formcontrol I want to pass a string so that I can know which form control to load, using *ngIf,in the template.
}
关于angular - 如何在 formGroup 中从 typescript 传递自定义字符串,并在模板内的 *ngFor 中读取它的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66733469/
我有 Angular + Firebase 应用程序。在我的一个组件中,我从 Firebase DB 获取元素并使用 *ngFor 将它们绑定(bind)到模板中: {{ comment.te
以下场景在 javascript 中会很简单,但我在 Angular 中遇到了一些问题。 我有一个像这样的数组: array a = ( "id" = 0, name = random(), colu
我有一个由部分组成的 firebase json 对象。部分内部还有部分线程。我正在尝试迭代这些部分,然后迭代线程。问题是我收到此错误 InvalidPipeArgument:管道“AsyncPipe
我无法在任何地方找到对差异的准确描述。与 *ngIf 和 ngIf 相同 *ngFor的例子 和一个ngFor的例子 最佳答案 区别在于*ngFor转换为 ) 允
这是一个我想实际解决的示例问题。我们将非常感谢您的帮助。非常感谢! 最佳答案 除非将其中一项设置为变量,否则无法直接显示 *ngFor 之外的一项
我如何在 Angular 2 中使用 *ngFor 遍历多维数组。下面是我使用的 DOM 包装器: 0 }"> {{menuName.name}} Pages
标题可能看起来很奇怪,但我所说的基本上是this link。正在做。 我正在寻找一种方法来使用当前迭代的 person在在*ngFor之外范围。 在他使用的链接中 ng-repeat-start和 n
我有以下对象: itemList = { "0": [], "1": [], "2": [], "3": [] }; 我还有以下 *ngFor: 如您所
我试图在我的 Angular 应用程序中显示对话列表,然后在每个对话标题下显示这些不同对话中包含的消息。 这是我最新的代码- HTML: {{ conversation.conversat
我想从 *ngFor 中删除 *ngFor 中的项目。 当我删除回复“test2”时, 在我添加其他回复后,“test3”变为空。
在表头中,我有动态列和搜索排序功能。但对于特定的列,我需要禁用排序功能。在表中 {{colName}}
我是 Angular 2 的初学者。我正在尝试创建一个具有动态表单的表,创建了表并且还绑定(bind)了值但是我无法访问 formControlName 中的值,尝试了下面的代码但它没有用。 有人可以
我正在使用Flowbite(flowbite.com),这是一个Tailwind CSS插件,正如你在我的Angular项目中所知道的。。一切都工作得很好,除了当我调用一个抽屉按钮内的表,这是渲染与n
{{ recipe.name }} {{ recipe.description }} 由于这条消息,我不能在这
我如何使用 ngFor 循环遍历以下对象数组并仅获取月份的名称? { "Jan": { "name": "January", "short": "Jan", "number
我正在 Angular 6 中开发一个 Web 应用程序。我从 Firebase 收到一组对象,并尝试使用 ngFor 向用户显示详细信息。我的对象数组是这样的: export interface C
抱歉,我不能在这里发布所有代码。但是,如果你能给我一些关于需要做什么的提示,我将不胜感激。 让我试着解释一下我的困境。 所以,这是我一直在尝试使用的代码片段 ngFor和 ngIf上:
我正在用数组中的数据填充表格,我想将自定义输入集中在表格的最后一个元素上,所以我有这个: {{ a few table fields}}
我有来自服务器的以下 JSON 响应: stuff = [ { "_id":"59080892c88561d46736a18d", "name":"Miscellaneo
我使用以下方法创建了一个 Angular 库: ng new my-workspace --create-application=false cd 我的工作区 ng 生成库 my-lib 图书馆工作。
我是一名优秀的程序员,十分优秀!