模型更新前角度函数触发:Zipcode检查器

时间:2013-10-24 19:29:35

标签: javascript angularjs

似乎checkZip函数在用户的zip绑定到参数之前触发。有没有更好的方法来实现角度工具?我想在他们输入正确的邮政编码后立即启动用户流程的下一步。

HTML

<input type="text" placeholder="Zipcode" ng-model="zip" ng-change="checkZip('{{zip}}')">

的Javascript

// Zipcode Key
$scope.zipKey = [94203, 94204, 94205];

// Zipcode checker
$scope.checkZip = function(zip) {
    var key = $scope.zipKey;
    if (zip.length == 5) {  
        for(var i = 0;i<key.length;i++) {
            if (key[i] == zip) {
                // Initiate State Change
                $scope.successAlert = 'We serve in your area!';
            }
        }
    }   
}

1 个答案:

答案 0 :(得分:2)

您最好使用角度表格验证并编写自定义验证器。

以下a great article涵盖了您需要了解的所有内容。

根据您的需要,您可以编写如下指令:

app.directive('ensureZipcode', function() {
  return {
    require: 'ngModel',
    link: function(scope, element, attrs, modelController) {
      scope.$watch(attrs.ngModel, function() {
        valid = true // or false, implement your logic here
        modelController.$setValidity('zipcode', valid);
      });
    }
  }
});

请注意:modelController被设置为link函数的第四个参数,因为我们指定了require: 'ngModel'