Javascript AngularJS在此字段更改时验证其他字段

Javascript AngularJS在此字段更改时验证其他字段,javascript,angularjs,validation,Javascript,Angularjs,Validation,所以,我有一个带有一些选项的选择菜单和一个接受数字的文本字段。我需要文本字段具有特定的范围,这取决于选择菜单的值,我已经使用自定义验证设置了这些值。我不明白的是,当选择菜单的选项更改时,如何强制运行验证 我尝试直接在HTML中执行以下操作: <select ng-change="$scope.my_form.numberField.$validate()"> 然后将选择更改为 <select ng-change="myFunction()"> 这是吐出的“未定义” H

所以,我有一个带有一些选项的选择菜单和一个接受数字的文本字段。我需要文本字段具有特定的范围,这取决于选择菜单的值,我已经使用自定义验证设置了这些值。我不明白的是,当选择菜单的选项更改时,如何强制运行验证

我尝试直接在HTML中执行以下操作:

<select ng-change="$scope.my_form.numberField.$validate()">
然后将选择更改为

<select ng-change="myFunction()">
这是吐出的“未定义”

HTML文本字段如下所示:

<input type="text" name="numberField" ng-model="numberField" number-validate>
App.directive('numberValidate', function() {
return {
    require: 'ngModel',
    link: function(scope, elm, attrs, ctrl) {
        ctrl.$parsers.unshift(function(viewValue) {
            var selectField = scope.my_form.selectField
App.directive('numberValidate', function() {
return {
    require: 'ngModel',
    link: function(scope, elm, attrs, ctrl) {
        scope.$watchCollection('[my_form.numberField, my_form.selectField]', function (data) {
            var numberField = data[0];
            var selectField = data[1];


我真的不知道接下来还能去哪里。当我直接更新字段时,验证工作非常完美,但我不知道如何在选择字段更改时更新它。有什么想法吗?

这是我目前的解决方案。我仍然觉得调用$validation()应该有效,而且我遗漏了一些东西,所以如果有人知道这有什么问题,请与我们分享

我更改了指令,添加了$watchCollection,并包含了我想要跟踪的两个字段

最初我有这样的想法:

<input type="text" name="numberField" ng-model="numberField" number-validate>
App.directive('numberValidate', function() {
return {
    require: 'ngModel',
    link: function(scope, elm, attrs, ctrl) {
        ctrl.$parsers.unshift(function(viewValue) {
            var selectField = scope.my_form.selectField
App.directive('numberValidate', function() {
return {
    require: 'ngModel',
    link: function(scope, elm, attrs, ctrl) {
        scope.$watchCollection('[my_form.numberField, my_form.selectField]', function (data) {
            var numberField = data[0];
            var selectField = data[1];
我把它改成这样:

<input type="text" name="numberField" ng-model="numberField" number-validate>
App.directive('numberValidate', function() {
return {
    require: 'ngModel',
    link: function(scope, elm, attrs, ctrl) {
        ctrl.$parsers.unshift(function(viewValue) {
            var selectField = scope.my_form.selectField
App.directive('numberValidate', function() {
return {
    require: 'ngModel',
    link: function(scope, elm, attrs, ctrl) {
        scope.$watchCollection('[my_form.numberField, my_form.selectField]', function (data) {
            var numberField = data[0];
            var selectField = data[1];
这仍然需要在html中进行数字验证:

<input type="text" name="numberField" ng-model="my_form.numberField" number-validate>


我对Angular比较陌生,所以我不确定这是否是最好的选择,但它现在正在工作。

这是我当前的解决方案。我仍然觉得调用$validation()应该有效,而且我遗漏了一些东西,所以如果有人知道这有什么问题,请与我们分享

我更改了指令,添加了$watchCollection,并包含了我想要跟踪的两个字段

最初我有这样的想法:

<input type="text" name="numberField" ng-model="numberField" number-validate>
App.directive('numberValidate', function() {
return {
    require: 'ngModel',
    link: function(scope, elm, attrs, ctrl) {
        ctrl.$parsers.unshift(function(viewValue) {
            var selectField = scope.my_form.selectField
App.directive('numberValidate', function() {
return {
    require: 'ngModel',
    link: function(scope, elm, attrs, ctrl) {
        scope.$watchCollection('[my_form.numberField, my_form.selectField]', function (data) {
            var numberField = data[0];
            var selectField = data[1];
我把它改成这样:

<input type="text" name="numberField" ng-model="numberField" number-validate>
App.directive('numberValidate', function() {
return {
    require: 'ngModel',
    link: function(scope, elm, attrs, ctrl) {
        ctrl.$parsers.unshift(function(viewValue) {
            var selectField = scope.my_form.selectField
App.directive('numberValidate', function() {
return {
    require: 'ngModel',
    link: function(scope, elm, attrs, ctrl) {
        scope.$watchCollection('[my_form.numberField, my_form.selectField]', function (data) {
            var numberField = data[0];
            var selectField = data[1];
这仍然需要在html中进行数字验证:

<input type="text" name="numberField" ng-model="my_form.numberField" number-validate>


我是Angular的新手,所以我不确定这是否是最好的选择,但它现在正在工作。

请使用您正在使用的文本字段html标记更新问题。我在上面添加了文本字段。您可以看看。如果可能的话,我更喜欢香草AngularJS解决方案,和/或解释为什么我尝试的方法不起作用。我发现了一些类似的问题,这是推荐的解决方法,但我就是无法让它工作。如果可能,将类型更改为number,然后尝试min,max Attribute请使用您正在使用的文本字段html标记更新问题。我在上面添加了文本字段。您可以查看一下。如果可能,我更喜欢香草AngularJS解决方案,和/或解释我尝试的操作不起作用的原因。我发现了一些类似的问题,这是推荐的解决方法,但我就是无法让它工作。如果可能,将类型更改为number,然后尝试使用min,max属性