【发布时间】:2016-08-31 17:44:52
【问题描述】:
我正在创建一个带有 Node 后端的 Angular2 应用程序。我将有向所述后端提交数据的表单。我希望在客户端和服务器端都进行验证,并且我想避免重复这些验证规则。
以上内容与实际问题有些无关,只是说这就是我不使用传统 Angular2 验证方法的原因。
这给我留下了以下 HTML 结构:
<div class="form-group" [class.has-error]="hasError(name)">
<label class="control-label" for="name"> Property Name
<input id="name" class="form-control" type="text" name="name" [(ngModel)]="property.name" #name="ngModel" />
<div class="alert alert-danger" *ngIf="hasError(name)">{{errors.name}}</div>
</div>
<div class="form-group" [class.has-error]="hasError(address1)">
<label class="control-label" for="address1"> Address
<input id="address1" class="form-control" type="text" name="address1" [(ngModel)]="property.address.address1" #address1="ngModel" />
<div class="alert alert-danger" *ngIf="hasError(address1)">{{errors['address.address1']}}</div>
</div>
我将有一些较大的表格,并希望减少上述内容的冗长。我希望实现类似于以下的目标:
<my-text-input label="Property Name" [(ngModel)]="property.name" name="name"></my-text-input>
<my-text-input label="Address" [(ngModel)]="property.address.address1" name="address1" key="address.address1"></my-text-input>
我正在努力实现这一目标。给我带来麻烦的特定部分是:
- 在
ngModel上设置双向绑定(我在组件中所做的更改不会反映回父级)。 - 基于组件的
@Input变量生成模板引用变量(#name和#address1属性)。- 我突然想到,也许我不需要为组件的每个实例使用单独的模板引用变量名。也许我可以只使用
#input,因为它只在该组件中被引用。想法?
- 我突然想到,也许我不需要为组件的每个实例使用单独的模板引用变量名。也许我可以只使用
- 我可以将
errors或constraints对象传递给组件的每个实例进行验证,但我想减少重复。
我意识到这是一个有点宽泛的问题,但我相信一个好的答案将对许多用户广泛有用且非常有价值,因为这是一种常见情况。我也意识到我实际上并没有展示我尝试过的东西(只是解释说我确实已经努力自己解决这个问题),但我故意省略了代码示例我已经尝试过,因为我相信必须有一个干净的解决方案来实现这一点,而且我不希望答案只是对我丑陋的非正统代码的小调整。
【问题讨论】:
标签: validation angular