2016-10-20 26 views
0

我想写一些自定义表单验证。我的指令工作正常。它正在被加载。但我想要进行实时表单验证。这意味着,虽然输入元素正在输入,我想确保它的验证。我不能为了我的生活似乎弄清楚如何得到这个输入表单的结果,以便它可以被指令看到。AngularJS无法获得表单输入指令

package.js

define([ 
     'angular', 
     'bb/checkout/form-validation/form-validation.directive' 
    ], 

    function defineFormValidationPackage(
     angular, 
     formValidation 
    ) { 

     'use strict'; 

     var module = angular.module('checkout.form-validation', []); 

     module.directive('cardFormValidation', formValidation); 

     return module; 
    } 
); 

形式,validation.directive.js

define(function defineFormValidation() { 
    'use strict'; 
    function formValidation() { 

     return { 
      restrict: 'C', 
      scope: { 
       addCardScope: '@' 

      }, 
      link: function ($scope, $element, $attrs) { 

       $scope.addCardScope = $scope.addCardScope || {}; 
       var city = $scope.addCardScope.city; 

       $element.on('keypress', function(event) { 
        console.log("CITY: ", $scope.addCardScope); 

       }); 
      } 
     }; 
    } 
    return formValidation; 
}); 

HTML

<form id="ccForm" class="card-form-validation customer-address-form" name="ccForm" formid="ccForm" action="" method="post"> 
    <input id="city" type="text" class="validate" ng-model="addCardScope.city" maxlength="30" /> 
    <div>{{addCardScope.city}}</div> 
</form> 

回答

0

您有需要一个addCardScope字符串绑定一个孤立的范围,但你没有将绑定传递到您的模板中的指令。

请问<form id="ccForm" class="card-form-validation customer-address-form" add-card-scope="someValue">有帮助吗?

此外,您似乎使用addCardScope作为对象,所以@不是你想要的,因为它需要一个字符串值。你可能想要=而不是?

另一种好奇的是,因为你是在addCardScope从未通过从外观看,并使其成为一个空的对象,如果它不是,addCardScope.city从未分配的,总是会返回undefined

如果你正在寻找做自定义表单验证,文件有可能引导你在正确的方向的例子。你现在正在尝试的方式并不是最好的方式。

https://docs.angularjs.org/guide/forms#custom-validation

+0

不幸的是,我们目前使用的角度1.2.30,并不在它可以升级点。我已经查看了1.2.30的表单文档,看来他们没有按照我尝试完成的方式进行。 – phelix

+0

我已删除表单中的指令,并可能决定这将是清洁剂对每个单独的形式元素的指令,因为每场都会有不同形式的验证。所以标记现在是这样的。 '

{{addCardScope.city}}
' – phelix