【发布时间】:2015-12-21 20:09:46
【问题描述】:
我在 angularjs 中清除表单中的无效字段时遇到问题。我已阅读此主题:
AngularJS: Set the model to be = {} again doesn't clear out input type='url'
How to properly clean form with invalid input from AngularJS controller?
但似乎没有什么能帮助我。我已经尝试了所有建议的解决方案,但我无法使其发挥作用。
我有这个 html,它是更大的指令模板的一部分:
...
<form name="providerSearch">
<text-box type="text" ng-model="providerSearchModel.contains.Address" id="SettlementAgentSearch_ProviderSearch_StreetAddress"></input>
<text-box type="text" ng-model="providerSearchModel.contains.City" id="SettlementAgentSearch_ProviderSearch_City"></input>
<text-box type="text" ng-model="providerSearchModel.beginsWith.criteria.Zip" id="SettlementAgentSearch_ProviderSearch_Zip"></input>
</form>
...
<span class="btn btn-link" ng-click="clearSearchFilters()">Clear</span>
文本框指令:
...
scope: {
model: '=ngModel',
...
},
...
在指令 a 中有这个代码:
...
link: function(scope,elem,attrs,ctrl) {
scope.providerSearchModel = {};
var setProviderModel = function() {
scope.providerSearchModel = {
contains: {},
beginsWith: { filter: 'beginsWith', criteria: {} }
};
};
setProviderModel();
scope.clearSearchFilters = function() {
setProviderModel();
}
}
...
到目前为止,这一切都很好,但是现在我需要将模式添加到不能包含数字的 City 字段中。我在输入字段中添加了正则表达式,但现在当值不正确时,我无法从 UI 中清除该字段。
我尝试了其他线程的建议解决方案,但它对我不起作用,我错过了什么?
尝试将 scope.clearSearchFilters 更改为此,但没有帮助:
scope.clearSearchFilters = function() {
scope.providerSearchModel = {
contains: null,
beginsWith: { filter: 'beginsWith', criteria: null }
};
}
用 $setPristine() 试过了,没有运气:
scope.clearSearchFilters = function() {
scope.providerSearchModel = {
contains: null,
beginsWith: { filter: 'beginsWith', criteria: null }
};
scope.providerSearch.$setPristine();
}
还尝试将该字段显式设置为 null 或 "" 但没有成功:
scope.clearSearchFilters = function() {
scope.providerSearchModel.City = null; // or scope.providerSearchModel.City = "";
scope.providerSearchModel.City = {
contains: null,
beginsWith: { filter: 'beginsWith', criteria: null }
};
scope.providerSearch.$setPristine();
}
我创建了反映我的问题的 plunker,patter 是只允许字符的输入,因此测试用例可以是:test 表示有效数据,test1 表示无效。 ..
【问题讨论】:
-
你可以创建一个 plunker 吗?
-
你试过
scope.providerSearchModel = { contains : { City : '' } }吗? -
是的,我刚试过,但没有任何改变。
-
@imbalid 我添加了 plunker
标签: javascript angularjs angularjs-directive