有没有办法清除在Angular中过滤的输入字段?
<input type='text' ng-model='abc' ng-pattern='\[a-z]\' required>
我可以清除$ scope.abc并重置表单字段状态标志,但如果输入字段值与模式不匹配,那么ng-model实际上已经为空,清除不会清除该字段。
我不想引用DOM。除了制作自定义指令外,还有人能想出一种清除不匹配输入字段的方法吗?
答案 0 :(得分:3)
目前尚不清楚&#34;清除&#34;适用于您的应用,但当<input>
字段的值无效时,Angular会将关联的ngModel
值设置为undefined
。
因此,清除字段的最简单方法是将关联的ngModel
设置为未定义,但如果ngModel
已经未定义,则无法工作。< / p>
它失败的原因是Angular无法检测到模型中的更改(因为它已经是undfined
)并且无法更新字段值。< / p>
可能的解决方法是暂时将ngModel
的值设置为其他内容(例如null
),然后再设置为undefined
。
尽管如此,对于Angular能够选择变化,修改应该在不同的diget周期中发生。这可以使用$timeout
:
<input type="text" ng-model="abc" ng-pattern="/[a-z]/" required />
<input type="button" value="Clear" ng-click="clearField()" />
$scope.clearField = function () {
if ($scope.abc !== undefined) {
/* No need for the "hack", since the
* associated model wasn't undefined */
$scope.abc = undefined;
} else {
/* The associated model was undefined:
* We need to change it to something else first */
$scope.abc = null;
$timeout(function () {
$scope.abc = undefined;
});
}
};
另请参阅此 short demo 。
顺便说一句,如果在您的应用环境中,null
可用于表示&#34;空&#34;领域,那么上述解决方案甚至是必要的;您可以将相关模型设置为null
(或''
或任何适合您的模式)。