AngularJS - 如何以编程方式启动验证

时间:2013-06-17 14:31:02

标签: angularjs

我有自定义验证,例如,已列入黑名单。我的模型值和列入黑名单的数组如下:

model = "not_blacklisted_yet"
blacklisted = ["foo", "bar"]

我想将"not_blacklisted_yet"添加到blacklisted,并以编程方式触发验证。如果我只是添加元素,则不会触发验证,因为我没有更改模型viewValue。

我怎样才能做到这一点?

编辑,atach plunker:http://plnkr.co/edit/L2sJY9VOJ7s8lKCm88sM?p=preview

1 个答案:

答案 0 :(得分:1)

我同意@ Atrix1987在评论中所说的话。您的需求需要两个入口点才能触发所述验证 - 一个是表单控制器的modelValue发生更改,另一个是blacklisted发生更改时。使用ui-validation已经对前者进行了处理,这使我们无法处理后一种情况。

我们希望在blacklisted更改时触发验证,因此我们需要通过$watch来监控它。在您的控制器中添加以下内容:

$scope.$watch('blacklisted', function(content) {
  if (content) {
    $scope.form.model.$setValidity(
      'blacklist',
      $scope.notBlackListed($scope.form.model.$modelValue)
    );
  }
}, true);

或者这是plunkr