将此普通(名称属性由服务器获取)表格与角度有关,无法弄清楚如何使验证工作。我应该把什么投入ng-show =“TODO”
<div ng-app>
<form ng-init="variants = [{duration:10, price:100}, {duration:30, price:200}]">
<div ng-repeat="variant in variants" ng-form="variant_form">
<div>
<label>Duration:</label>
<input name="variants[{{$index}}][duration]" ng-model="variant.duration" required />
<span ng-show="TODO">Duration required</span>
</div>
<div>
<label>Price:</label>
<input name="variants[{{$index}}][price]" ng-model="variant.price" />
<span ng-show="TODO">Price required</span>
</div>
</div>
</form>
</div>
ps:这只是一种形式,更复杂
由于
答案 0 :(得分:11)
AngularJS依赖输入名称来公开验证错误。
不幸的是,截至今天,不可能(不使用自定义指令)动态生成输入名称。实际上,检查输入文档我们可以看到name属性只接受字符串。
长话短说,你应该依靠ng-form来验证动态创建的输入。类似的东西:
<div ng-repeat="variant in variants" >
<ng-form name="innerForm">
<div>
<label>Duration:</label>
<input name="duration" ng-model="variant.duration" required />
<span ng-show="innerForm.duration.$error.required">Duration required</span>
</div>
<div>
<label>Price:</label>
<input name="price" ng-model="variant.price" required/>
<span ng-show="innerForm.price.$error.required">Price required</span>
</div>
</ng-form>
工作小提琴here
更新:根据您的服务器端要求,为什么不这样做:
<input type="hidden" name="variants[{{$index}}][duration]" ng-model="variant.duration"/>
<input name="duration" ng-model="variant.duration" required />
隐藏的输入将是服务器读取的输入,而另一个将用于进行客户端验证(稍后由服务器丢弃)。这有点像黑客但应该有用。
PS:确保您的表单在实际提交之前有效。可以使用ng-submit
完成