Javascript AngularJS:如何在控制器中手动将输入设置为$valid?

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-

使用插件和AngularJS内置formController验证

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);