您的代码有点混乱。真的我无法想象你想这样做,但是..
首先。当我们有输入时,在 Angular 中我们使用[(ngModel)]="variable"。这使得在我们的 .ts 中有变量的值,而在 .html 中我们显示了变量的值。
所以,在你的 .ts 中定义四个变量
gender:string
impact:string
fromDate:any
toDate:any
你申请的“表格”必须是这样的
Gender:<select [(ngModel)]="gender">
...
</select>
Impact:<select [(ngModel)]="impact">
...
</select>
<input type="date" [(ngModel)]="fromDate">
<input type="date" [(ngModel)]="toDate">
class="form-control form-control-sm"
name="gender"
ngModel
[ngModelOptions]="{updateOn: 'submit'}"
>
当您遍历可以使用辅助数组的类别时,同理
categories:boolean[]=[]
并使用
<ul *ngFor="let list of dlCategory">
<div class="form-check form-check-inline">
<input type="checkbox" [(ngModel)]="categories[i]
name="{{list.name}}">
<label class="form-check-label" for="">{{list.label}}</label>
</div>
</ul>
好吧,我在你之前的帖子中告诉你如何“转换”数组中检查值的列表,this SO
因此,我们将创建一个带有 true、false 的布尔数组,我们将让“用户”的属性变为具有选定值的属性
<ul *ngFor="let list of dlCategory">
<div class="form-check form-check-inline">
<input #check type="checkbox"
[ngModel]="user.categories.indexOf(list.name)>=0"
(ngModelChange)="onChange(list.name,check.checked)"
name="{{list.name}}">
<label class="form-check-label" for="">{{list.label}}</label>
</div>
</ul>
而 onChange 就变成这样了
onChange(option:string,checked:boolean)
{
if (checked && this.user.categories.indexOf(option)<0)
this.user.categories=[...this.user.categories,option]
.sort((a,b)=>this.dlCategory.findIndex(x.name==a)>this.dlCategory.findIndex(x.name==b)?1:-1)
if (!checked)
this.user.categories=this.user.categories.filter(x=>x!=option)
}
最后,当我们要显示类别的数据时,我们可以遍历 dlCategory 并且仅当猫在 user.categories 中时才显示
<div *ngFor="cat of dlCategories;let i=index>
<ng-container *ngIf="user.categories.indexOf(cat.name)>=0">
{{cat.name}}{{cat.value}}
<ng-container>
</div>
注意:我很着急,可能代码有语法错误,但我希望答案可以帮助你一些