angularjs - 无法使输入无效(对象不支持 属性 或方法“$setValidity”)

angularjs - not able to invalidate input (Object doesn't support property or method '$setValidity')

我尝试执行以下操作

if ($scope.RetypePassword != $scope.resource.Password) {
     $scope.resource.Password.$setValidity("missmatch", false);
} else {
     $scope.resource.Password.$setValidity("missmatch", true);
}

但失败并出现此错误

TypeError: Object doesn't support property or method '$setValidity'

可能是什么原因?

resource.Password 数据绑定到这样的输入

<input type="password" ng-model="resource.Password" name="Password" />

您不应该使用表单名称 resource,因为您的模型已经在 resource 中包含对象,尝试一些与名称不同的名称将解决您的问题 喜欢名字="myForm"

标记

<form name="myForm">
   <input type="password" ng-model="resource.Password" name="Password" />
</form>

代码

if ($scope.RetypePassword != $scope.resource.Password) {
     $scope.myForm.Password.$setValidity("missmatch", false);
} else {
     $scope.myForm.Password.$setValidity("missmatch", true);
}

问题是 resource.RetypePassword 是一个范围对象(模型),这与您需要的 ngModelController 不一样。该控制器不直接暴露给作用域。但是,您可以通过输入名称的父 form 对象访问它。

因此,如果您的 HTML 看起来像这样:

<form novalidate name="form">
    <div>
        <label>Password</label>
        <div><input type="password" ng-model="resource.Password" name="Password" /></div>
    </div>
    <div>
        <label>Confirm Password</label>
        <div><input type="password" ng-model="resource.RetypePassword" name="RetypePassword" /></div>
    </div>
</form>

那你就可以做到了

if ($scope.resource.RetypePassword != $scope.resource.Password) {
    $scope.form.Password.$setValidity("missmatch", false);
} else {
    $scope.form.Password.$setValidity("missmatch", true);
}

看一下原理演示

演示: http://plnkr.co/edit/tVFlytaW2WVJfLdiq4o2?p=preview