AngularJS:我如何在控制器中手动设置输入为$valid
AngularJS: How do I manually set input to $valid in controller?
使用TokenInput插件并使用AngularJS内置的formController验证。
现在我试图检查字段是否包含文本,然后设置字段为有效,如果它是。使用插件的问题是,它创建了自己的输入,然后创建了一个ul+li的样式。
我可以在控制器中访问addItem (formname)和我的功能,我只需要将其设置为$valid。
标记。
<form class="form-horizontal add-inventory-item" name="addItem">
<input id="capabilities" name="capabilities" token-input data-ng-model="inventoryCapabilitiesAutoComplete" data-on-add="addCapability()" data-on-delete="removeCapability()" required>
<div class="required" data-ng-show="addItem.capabilities.$error.required" title="Please enter capability."></div>
</form>
JS .
$scope.capabilityValidation = function (capability) {
if (capability.name !== "") {
addItem.capabilities.$valid = true;
addItem.capabilities.$error.required = false;
} else {
addItem.capabilities.$valid = false;
addItem.capabilities.$error.required = true;
}
};
当TokenInput输入并传递对象时,我正在运行capabilityValidation函数。
编辑:发现我输入的ng-model做的东西,并获得自动完成的结果,这就是为什么我不能得到ng-valid的工作,因为它是基于模型的。
$scope.inventoryCapabilitiesAutoComplete = {
options: {
tokenLimit: null
},
source: urlHelper.getAutoComplete('capability')
};
我没有写这个自动完成的实现,有没有另一种方法来做到这一点,我可以访问ng-model attr并将模型函数移动到其他地方?
您不能直接更改表单的有效性。如果所有子代输入都有效,则表单有效;如果无效,则表单无效。
你应该做的是设置输入元素的有效性。一样,
addItem.capabilities.$setValidity("youAreFat", false);
现在输入(以及表单)是无效的。您还可以查看导致无效的错误。
addItem.capabilities.errors.youAreFat == true;
以上的答案并没有帮助我解决我的问题。经过长时间的搜索,我偶然发现了这个部分解决方案。
我终于解决了我的问题,用这段代码手动设置输入字段为ng无效(设置为ng有效设置为'true'):
$scope.myForm.inputName.$setValidity('required', false);
我在这篇文章中遇到了一个类似的问题。我的解决办法是添加一个隐藏字段来保存我的无效状态。
<input type="hidden" ng-model="vm.application.isValid" required="" />
在我的例子中,我有一个可空bool值,用户必须从两个不同的按钮中选择一个。如果它们的回答是肯定的,则将一个实体添加到集合中,并且按钮的状态将发生变化。在所有问题都得到回答之前(每对中的一个按钮被单击),表单是无效的。
vm.hasHighSchool = function (attended) {
vm.application.hasHighSchool = attended;
applicationSvc.addSchool(attended, 1, vm.application);
}
<input type="hidden" ng-model="vm.application.hasHighSchool" required="" />
<div class="row">
<div class="col-lg-3"><label>Did You Attend High School?</label><label class="required" ng-hide="vm.application.hasHighSchool != undefined">*</label></div>
<div class="col-lg-2">
<button value="Yes" title="Yes" ng-click="vm.hasHighSchool(true)" class="btn btn-default" ng-class="{'btn-success': vm.application.hasHighSchool == true}">Yes</button>
<button value="No" title="No" ng-click="vm.hasHighSchool(false)" class="btn btn-default" ng-class="{'btn-success': vm.application.hasHighSchool == false}">No</button>
</div>
</div>
这很简单。例如:在你的JS控制器中使用this:
$scope.inputngmodel.$valid = false;
或
$scope.inputngmodel.$invalid = true;
或
$scope.formname.inputngmodel.$valid = false;
或
$scope.formname.inputngmodel.$invalid = true;
所有的工作为我不同的要求。
为了使此工作日期错误,我必须先删除错误,然后再调用$setValidity以使表单标记为有效。
delete currentmodal.form.$error.date;
currentmodal.form.$setValidity('myDate', true);
- 如果值为空,如何设置输入的默认值?jQuery
- 如何设置输入文本框jquery的值
- jQuery - 添加删除类 - 设置输入值
- 可以设置输入类型=文件的文本框的高度
- 在jquery中,从同一对象的属性设置输入字段和标签的正确方法是什么
- 设置输入类型月份的值
- 整数 + 2x 单选按钮设置输入 --> 输出
- jQuery timepicker:如何动态设置输入字段的minTime
- 设置输入类型=日期
- IE 9 jQuery未设置输入值
- React设置输入's值
- 使用jquery设置输入数组值
- 如何使用javascscript设置输入值
- 使用 javascript 设置输入标签的值
- 根据角度中的另一个字段设置输入字段的默认值
- 如何设置输入元素的值
- 如何在哈希中设置输入值
- 我如何在 jQuery 中以编程方式设置输入文本框的值
- Javascript在加载后设置输入值
- 无法使用 Javascript 设置输入的值