【发布时间】:2017-02-22 11:47:42
【问题描述】:
我正在构建一个角度指令,其中我有两个数字输入,它们一起代表一个年龄范围。
我想要实现的是能够通过以下方式使用该指令:
<input-age-range
name="ageRange"
ng-model="filterUpdateVM.ageRange">
</input-age-range>
<span ng-if="myCtrlVM.form.ageRange.$error.ageRange">
Please, enter a valid age range.
</span>
并且能够在输入的年龄范围不正确时显示自定义错误。
我的指令 html 模板看起来是这样的:
<div class="col-md-3">
<input type="number"
class="form-control"
placeholder="Minimum age"
name="ageMin"
min="18"
max="80"
ng-change="checkAndValidateAgeRange()"
ng-model="ageRange.ageMin"
ng-model-options="{allowInvalid: true}">
</div>
<div class="col-md-3">
<input type="number"
class="form-control"
placeholder="Maximum age"
name="ageMax"
min="18"
max="80"
ng-change="checkAndValidateAgeRange()"
ng-model="ageRange.ageMax"
ng-model-options="{allowInvalid: true}">
</div>
每次用户在输入中输入任何内容时,我都希望检查输入的范围是否正确:
- 两个年龄都应该是数字
- 两个年龄都应该在 18 到 80 岁之间
- ageMin
到目前为止,ng-model-options="{allowInvalid: true}" 将触发我指令中的 ngChange 函数,以防输入的任何年龄不在所需的年龄范围 (18-80) 之间 - 这样我可以进行一些检查并设置输入如果有错误并显示它。
我的问题是,如果最初输入的年龄不是数字,则不会调用 ngChange:它将无法进行错误检查,因此不会显示任何错误。在这种情况下,如何在不更改输入 type="number" 的情况下调用我的 ngChange 函数?
编辑:已添加 Jsfiddle: http://jsfiddle.net/afkf96qh/
【问题讨论】:
-
如果
type="number"那么有人如何输入不是数字? -
@Kumkar 即:'eeeee')
-
输入任意字符。
-
@PetrAveryanov 然后在
ng-change上我们可以检查值是否包含eeeee -
@Kumkar 如果输入的 minAge 不是数字,则会收到
form.ageMin.$error.number错误,但不会触发 ngChange。我想在我的指令中检查这个错误以设置 ngModel 的有效性,并能够在使用我的指令时捕获错误。
标签: javascript angularjs input frontend