【发布时间】:2021-07-08 05:16:22
【问题描述】:
我有很多带有标签和输入的表单组。我想制作可重复使用的 ng-template
原来如此
<div class="form-group">
<label class="form-control-label" for="address">Address</label>
<input [disabled]="isTheLoggedInUserAdmin" id="address" class="form-control form-
control-alternative"
[(ngModel)]="sharedService.tempUser.address" name="address" type="text">
</div>
并使用 ng-template 将其转换为
<ng-template [ngTemplateOutlet]="formGroup"
[ngTemplateOutletContext]="{data: {inputId:'address', label:'Address', ngModel:
sharedService.tempUser.address }}"
></ng-template>
<ng-template #formGroup let-data="data">
<div class="form-group">
<label class="form-control-label" [for]="data.inputId">{{data.label}}</label>
<input [disabled]="isTheLoggedInUserAdmin" [id]="data.inputId" class="form-control form-control-
alternative"
[(ngModel)]="sharedService.tempUser.address" [name]="data.inputId" type="text">
</div>
</ng-template>
所以我在这里自动传递 inputId,标签名称,现在 ngModel 是硬编码的,它指向 sharedService.tempUser.address
但是我的 ng-template 需要是动态的,所以使用 ng-template 调用我应该传递参数 like label for example - 参数 shpuld 指向我的打字稿文件中的不同 ngModel 变量
但是当我这样做时
<div class="form-group">
<label class="form-control-label" [for]="data.inputId">{{data.label}}</label>
<input [disabled]="isTheLoggedInUserAdmin" [id]="data.inputId" class="form-control form-control-alternative"
[(ngModel)]="data.ngModel" [name]="data.inputId" type="text">
</div>
现在 data.ngModel 是从 ng-template 调用发送的 - 这是 sharedService.tempUser.address,我从 sharedService.tempUser.address 获得实际值,但*问题是 ngModel 在这里不起作用`
当我输入内容时它不会更新
我该如何解决这个问题?
【问题讨论】:
-
不使用
ng-template,您认为编写一个实现ControlValueAccessor的自定义控件组件可能是更好的解决方案吗? -
@JackySky 能否请您提供一个如何使用 ControlValueAccessor 完成此操作的示例
-
我已经添加了一个答案,请随时检查它是否符合您的情况。
标签: angular angular-forms