清除嵌套指令中的无效输入字段
Clear invalid input fields in nested directives
我在angularjs中清除无效字段有问题。我读过这个线程:
AngularJS:再次设置模型为= {}not 't clear out input type='url'
如何从AngularJS控制器正确清理表单无效输入?
但是似乎什么都帮不了我。我已经尝试了所有建议的解决方法,但就是行不通。
我有这个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 }
};
}
尝试使用$ set质朴(),没有运气:
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,反映了我的问题,模式是在输入上,只允许字符,所以测试用例可以是:test有效数据,和test1无效…
http://plnkr.co/edit/R5utIfukkOlznoCwi31i?p =预览
由于评论对话而编辑:
问题是显示与模型值的组合,以及"未定义"。在原始的柱塞示例中,将'<br/>"{{ providerSearchModel.contains.City }}"'
添加到mainDirective
模板中(就在按钮后面),并键入两个测试用例:正如您可以看到的test1,模型值为空(因为Angular不会让无效值进入模型)。
将容器更改为空将使所有ng-model值未定义,这不会导致视图更新。
对于直接角,你需要将每个字段值设置为空字符串或null:
var setProviderModel = function() {
scope.providerSearchModel = {
contains: {City:null},
beginsWith: { filter: 'beginsWith', criteria: null }
};
};
对于清除整个表单,如果您将所有字段ng-models放在同一个容器中,您可以遍历容器中的属性并将每个属性设置为null。例如
var clearForm = function() {
// Set all properties in the ng-model container to null
for (var prop in scope.providerSearchModel.contains) {
if (scope.providerSearchModel.contains.hasOwnProperty(prop)) {
scope.providerSearchModel.contains[prop] = null;
}
}
scope.providerSearchModel.beginsWith: { filter: 'beginsWith', criteria: null};
};
};
- 如果我在javascript中输入无效的电子邮件或空白,如何显示特定的文本框边框红色
- 隐藏和显示输入无效
- AngularJS-表单验证,如何滚动到第一个无效输入
- 在无效输入:JavaScript 上停止注册
- 如何显示无效输入的引导弹出框
- 我的警告标签未显示在无效输入上
- Javascript 表单验证 - PHP 变量作为 VALUE - 无效输入
- 反应组件和无效输入
- jQuery 验证表单,突出显示无效输入
- jQuery Validator无效输入字段在成功提交后消失
- 如何在不丢失无效输入的情况下呈现视图中的Backbone.Model错误
- 如果发生无效输入,如何使函数返回到某个位置
- 清除嵌套指令中的无效输入字段
- 如何获取无效输入的内容长度
- 让AngularJS识别浏览器已经检测到的无效输入的推荐解决方案
- 手动突出显示所有角度形式的无效输入
- 使用 jQuery 处理来自表单的无效输入
- 如何验证我的谷歌地图搜索文本框是否存在无效输入
- 在无效输入的文本框上显示警告
- 错误处理-我的JavaScript API是否应该抛出或返回无效输入的值