, (: Angular). , , ( , ngRequired - ). , $scope:
angular.module('myApp', []);
angular.module('myApp').directive('validator', validator);
function validator (){
return {
restrict: 'E',
require: {
ngModelCtrl: 'ngModel'
},
replace: true,
templateUrl: 'view.html',
scope: {},
controllerAs: 'ctrl',
bindToController: {
rows: '=',
onSelected: '&?',
typedText: '&?',
textFiltered: '@?',
ngRequired: "=?"
},
controller: 'validatorController'
}
}
angular.module('myApp').controller('validatorController', validatorController);
validatorController.$inject = ['$element'];
function validatorController($element){
var ctrl = this;
ctrl.validate = validate;
ctrl.$onInit = $onInit;
function $onInit() {
if(ctrl.ngRequired)
ctrl.ngModelCtrl.$validators.myCustomRequiredValidator = validate;
}
function validate (modelValue, viewValue){
return rowWasSelected !== undefined
}
}
Angular docs $:
require bindToController , , . , , $onInit.
: ES6 , . $onInit , .
, , Angular . , ( , , ), , , 1.4 0,6.
Second Edit: :
1) .ng-invalid Angular, . , , , ng-invalid. , .ng-invalid-required. ng-invalid. , , . - css :
.ng-invalid.ng-touched {
border: 1px #f00 solid;
}
, Angular. . - , . , , ng-model-options.
2) $formatters . Angular . , Angular $, . Angular, . :
→ $parsers → $validators →
→ $formatters →
. , , (, ), $formatter. $, . , , $, $validators, , .
3). , Angular, , - , , bindToController $onInit. ngModelCtrl. , , , AFTER $onInit.
4) : . , (.. ). . , , . , $setValidity . , "", true . , . ( ). ng-model, , - , . :
function validate (modelValue, viewValue) {
var inputField = ctrl.formCtrl.inputName, ddField = ctrl.formCtrl.ddName;
inputField.$setValidity('validationName', ddField.$touched && rowSelectedCondition);
return true;
}
, , , $touched (.. ) , . . ng-model-options . , . ( $) , viewValue, .
validationName , , , .ng-invalid ( ) .ng-invalid-validation-name.
formCtrl, require (formCtrl: '^ form')