Javascript AngularJS:如何在控制器中手动将输入设置为$valid?
使用插件和AngularJS内置formController验证Javascript AngularJS:如何在控制器中手动将输入设置为$valid?,javascript,validation,angularjs,Javascript,Validation,Angularjs,使用插件和AngularJS内置formController验证 addItem.capabilities.errors.youAreFat == true; 现在我试图检查字段是否包含文本,如果包含文本,则将字段设置为valid。使用插件的问题是,它会创建自己的输入,然后创建一个ul+li用于stling 我可以访问addItem(formname)和控制器中的Capabilities,只需将其设置为$valid 标记 <form class="form-horizontal add-
addItem.capabilities.errors.youAreFat == true;
现在我试图检查字段是否包含文本,如果包含文本,则将字段设置为valid。使用插件的问题是,它会创建自己的输入,然后创建一个ul+li用于stling
我可以访问addItem(formname)和控制器中的Capabilities,只需将其设置为$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>
当TokenInput输入了某些内容并传入对象时,我正在运行capabilityValidation函数
编辑:
在我的输入中发现ng模型做了一些事情并得到了自动完成的结果,这就是为什么我不能让ng有效工作的原因,因为它是基于模型的
$scope.inventoryCapabilitiesAutoComplete = {
options: {
tokenLimit: null
},
source: urlHelper.getAutoComplete('capability')
};
我没有编写这个自动完成实现,有没有其他方法可以这样做,我可以访问ng模型属性并将模型函数移到其他地方?您不能直接更改表单的有效性。如果所有子体输入都有效,则表单有效;如果不有效,则表单无效 您应该做的是设置输入元素的有效性。就这样,
addItem.capabilities.$setValidity("youAreFat", false);
现在输入(以及表单)无效。
您还可以查看导致失效的错误
addItem.capabilities.errors.youAreFat == true;
上面的答案没有帮我解决问题。经过长时间的搜寻,我偶然发现了这个 我终于解决了这段代码的问题,手动将输入字段设置为ng invalid(设置为ng valid,将其设置为“true”):
我在这篇文章中遇到了类似的问题。 我的解决办法是添加一个隐藏字段来保存我的无效状态
<input type="hidden" ng-model="vm.application.isValid" required="" />
你上高中了吗*
对
不
它非常简单。例如:
在JS控制器中,请使用以下命令:
$scope.inputngmodel.$valid = false;
或
或
或
所有工程为我不同的要求。如果这可以解决您的问题,请点击。要使此操作适用于日期错误,我必须先删除错误,然后再调用$setValidity以将表单标记为有效
delete currentmodal.form.$error.date;
currentmodal.form.$setValidity('myDate', true);
既然您的插件正在创建自己的输入,并且您已经编写了一个函数来进行自己的验证,为什么不也使用您自己的$scope属性进行验证:
换句话说,您希望/需要使用FormController有什么原因吗?既然我的所有其他表单都在使用它,我希望保留它提供的控件。插件创建的输入实际上在我的原始输入中设置了值,然后我需要在验证中对其进行检查,但当有输入值时,它不会更新formController。我特意缩短了标记以隔离输入。我还有很多相同形式的输入,好的。您是否尝试了添加项功能。$valid=true和/或将添加项功能。$error.required设置为true或false(视情况而定)?我尝试了这两种方法。我将更新我的问题以向您展示。$valid和$error.required在控制器中的我的断点上显示为未定义,但addItem.capabilities仍有数据。如果capabilities
是一个变量,该怎么办?我有一个包含输入名称的数组,我想在数组中循环并逐个将它们设置为无效:/variable是什么意思?它直接绑定到表单本身,而不是表单中的值。它使用表单的name
属性和输入的id
属性。这与ngModel
设置的值不同,我找到了解决方案,但这就是我的意思:$scope.addItem['myVariableName'].$setValidity(“youAreFat”,false)代码>在这之后,一些输入字段似乎不再是change或angular 1.4.7上的validates,我不得不在代码前面加上$scope<代码>$scope.addItem.capabilities.$setValidity(“youAreFat”,false)代码>我做了同样的事情,效果非常好。但现在我在重新验证同一领域时遇到了一些问题。它不会改变到改变的状态,这是非常令人担忧的。我使用ng model options=“{updateOn:'submit'}”在单击按钮时进行验证。有什么想法吗?@OliverKK只要输入有效,你就需要调用$setValidity
,并将true
作为第二个参数。使用rootscope没有意义,应该是Scope。我尝试过类似的解决方案,但我发现的问题是,如果我尝试更改表单中控件的值,它仍然无效。在我的例子中,控件是一个带有内部select的指令。如果我为我的指令(即ng表单)设置了invalid,那么我将无法删除该无效状态。
$scope.inputngmodel.$invalid = true;
$scope.formname.inputngmodel.$valid = false;
$scope.formname.inputngmodel.$invalid = true;
delete currentmodal.form.$error.date;
currentmodal.form.$setValidity('myDate', true);