如何在Angular中清除筛选的输入字段?

时间:2014-04-25 12:03:51

标签: angularjs angularjs-directive

有没有办法清除在Angular中过滤的输入字段?

<input type='text' ng-model='abc' ng-pattern='\[a-z]\' required>

我可以清除$ scope.abc并重置表单字段状态标志,但如果输入字段值与模式不匹配,那么ng-model实际上已经为空,清除不会清除该字段。

我不想引用DOM。除了制作自定义指令外,还有人能想出一种清除不匹配输入字段的方法吗?

1 个答案:

答案 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(或''或任何适合您的模式)。