2015-01-15 55 views
0

我不明白這個問題。我嘗試添加驗證(如果表單提交失效,如果無效)數組是否包含項目。我試圖用一個自定義的指令,但是當模型更新:( 作爲角的東西呈現一個播放應用模板內,形式不是我的範圍內定義的,我不能做一些簡單的表格無效它永遠不會被調用。angularjs無法自定義驗證模型數組值

我試圖實現的是無效的表單,直到某些類別已被添加到$ scope.app.categories從而取消激活提交按鈕,這也不在我的範圍內

這裏來的代碼(角1.2.23版) :

<input type="text" ng-model="app.categories" name="size" custom /> 
<input id="tagsinput" type="text" ng-model="new.category" on-keyup="disabled" keys="[13]"/> 
<a class="btn" ng-click="addCategory()">Add</a> 

// loading of app happens above this is the contoller function 
    $scope.addCategory = function() { 
     $scope.app.categories.push({name: $scope.new.category}); 
     $scope.new.category = ""; 
    } 

app.directive('custom', function() { 
    return { 
    require: 'ngModel', 
    link: function(scope, elm, attrs, ctrl) { 
     ctrl.$formatters.unshift(function(val1, val2, val3, val4) { 
      // not even gets called would like to validate app.categories here :(
      console.log(true); 
     }); 
    } 
    }; 
}); 

回答

0

您正在使用$formatters,但對於VA應該使用$validators。而不是你開頭的行ctrl.$formatters,請嘗試以下操作:

ctrl.$validators.yourValidatorName = function(modelValue, viewValue) { 
    console.log("Validator is called."); 
    return true; // This means validation passed. 
}; 

您可以在documentation找到。另外不要忘記將指令添加到HTML元素,所以在你的案例<input ... custom>。要在驗證失敗時禁用提交按鈕,請使用<input type="submit" data-ng-disabled="formName.$invalid">

+0

$驗證器是未定義的 - 也許角1.2.23是缺少這個?! – xstring 2015-01-15 18:08:30

+0

也提交按鈕超出我的範圍我只是一個播放模板,其中外部窗體和按鈕無法更改... – xstring 2015-01-15 18:11:02

+0

@xstring你是對的,驗證器被添加到1.3中,並且在1.2中不可用([這裏是有什麼可用](https://code.angularjs.org/1.2.28/docs/api/ng/type/ngModel.NgModelController))。你有沒有想過這個? – jackweirdy 2015-02-06 11:50:29