2015-11-16 122 views
0

所以,我有一個選擇菜單,其中包含一些選項以及一個輸入數字的文本字段。我需要文本字段具有特定範圍,具體取決於選擇菜單的值,我已經使用自定義驗證進行了設置。我弄不清楚的是,當選擇菜單的選項更改時,如何強制執行驗證?AngularJS在此字段更改時驗證其他字段

我試過直接在HTML做:

<select ng-change="$scope.my_form.numberField.$validate()"> 

這並沒有工作,所以我在控制器中創建一個創建一個函數來運行:

$scope.myFunction = function(){ 
    $scope.my_form.numberField.$validate(); 
} 

然後改變了選擇到

<select ng-change="myFunction()"> 

然後我試圖改變功能代碼:

console.log($scope.my_form.numberField.$validate()); 

這是吐出了一個「未定義」

的HTML文本字段看起來是這樣的:

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

我真的不知道還有什麼地方可以從這裏走。驗證工作完美,因爲我直接更新字段,但我不知道如何讓選擇區域更改時更新它。有任何想法嗎?

+0

請更新與您正在使用的文本提交的HTML標記的問題。 –

+0

我添加了上面的文本字段。 –

+0

你可以看看https://github.com/angular-ui/ui-validate/。 – sp00m

回答

0

這是我目前的解決方案。我仍然想調用$ validation()應該工作,並且我錯過了一些東西,所以如果有人知道這個問題是什麼,請分享。

我改變了我的指令,添加了$ watchCollection幷包含了兩個我想跟蹤的字段。

我原本是這樣的:

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相當陌生,所以我不確定這是否是最好的選擇,但它一直在工作現在。

相關問題