angular - 有条件地设置输入类型
问题描述
在下面的代码中,有没有一种方法可以根据组件属性有条件地设置输入的类型,例如:
<input type="typeof(model[key])">
或[ng-type]="typeof(model[key])"
或<input type="typeof(model.key)">
或其他类似的东西?
<form #myForm="ngForm" (ngSubmit)="sendQuery()">
<div *ngFor="let key of modelKeys">
{{key}}
<input #myInput [ng-type]="typeof(model[key])" name="{{key}}" placeholder="Enter {{key}} Here" [(ngModel)]="model[key]" required *ngIf="key==='q'" appNoSpecialChars/>
<input #myInput [ng-type]="typeof(model[key])" name="{{key}}" placeholder="Enter {{key}} Here" [(ngModel)]="model[key]" minlength = '2' maxlength='4' *ngIf="key==='stars'" appNoSpecialChars />
<input #myInput [ng-type]="typeof(model[key])" name="{{key}}" placeholder="Enter {{key}} Here" [(ngModel)]="model[key]" *ngIf="key!=='q' && key!=='stars'" appNoSpecialChars/>
<p *ngIf="!myForm.form.get(key)?.valid" >Not valid</p>
</div>
<button type="submit" [disabled]="!myForm.valid">Submit</button>
</form>
解决方案
不要绑定到 type 属性,而是尝试使用结构指令,如*ngIf
or[ngSwitch]
来显示正确的输入。就像是:
<form>
<div *ngFor="let key of modelKeys">
{{key}}
<ng-container [ngSwitch]="model[key]">
<input #myInput *ngSwitchCase="'text'" type="text" name="{{key}}" placeholder="Enter {{key}} Here" />
<input #myInput *ngSwitchCase="'email'" type="email" name="{{key}}" placeholder="Enter {{key}} Here" />
<input #myInput *ngSwitchCase="'password'" type="password" name="{{key}}" placeholder="Enter {{key}} Here" />
</ng-container>
</div>
<button type="submit">Submit</button>
推荐阅读
- java - 如何正确继承类并构建我的程序?
- python - 我希望谈论爷爷的变量说他老了,但它说他不老。我做错了什么?
- java - java-如何正确添加时间?
- python-3.x - Python3 numpy数组大小与列表比较
- android - 在 Flutter 上 iOS 和 Android 的 bundle-Identifiers 可以不同吗?
- git - 如何将多个过去的提交压缩为一个
- python - 无法将 TLS 与 Couchbase Python SDK 3.0.x 一起使用
- xampp-vm - XAMPP VM 没有响应 OSX big sur beta 3
- ruby - 有没有办法将两个分页博客放到一个 Jekyll 站点中,托管在一个 GitHub Pages 存储库中?
- opengl - OpenTK,将向量数组传递给着色器