3

我尝试执行以下操作

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" />
4

2 回答 2

1

您不应该有表单名称resource,因为您的模型中已经有对象resource,尝试一些与名称不同的方法将解决您的问题,例如 name="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);
}
于 2015-05-29T08:42:19.203 回答
1

问题是这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

于 2015-05-29T08:44:30.523 回答