I have an input field inside an ng-repeat
, which gets a dynamic name tag, like so:
<div ng-repeat="a in b track by $index">
<div show-errors >
<label for="new_taxid_abroad_{{$index}}"> Bla </label>
<input name="new_taxid_abroad_{{$index}}" ng-model="xxx" type="text">
</div>
</div>
The show-errors validator looks like this:
.directive('showErrors', function($timeout) {
var validate = function($element, valid) {
$element.toggleClass('has-error', !valid);
$element.toggleClass('has-success', valid);
};
return {
restrict: 'A',
require: '^form',
controller: function($scope, $element, $attrs) {
this.$validate = function(name) {
validate($element, name);
};
},
link: function($scope, $element, $attrs, formCtrl) {
// find the text box element, which has the 'name' attribute
var inputEl = $element[0].querySelector("[name]");
// convert the native text box element to an angular element
var inputNgEl = angular.element(inputEl);
// get the name on the text box so we know the property to check
// on the form controller
var inputName = inputNgEl.attr('name');
var validateEvent = function(evt, name) {
if (name && name != inputName)
return;
$timeout(function() {
validate($element, formCtrl[inputName] ? formCtrl[inputName].$valid : false);
}, 0);
};
// only apply the has-error class after the user leaves the text box
inputNgEl.bind('blur', validateEvent);
$scope.$on('show-errors-check-validity', validateEvent);
}
}
});
I'm trying to trigger the validator for each input individually, using the name tag
. So far, the {{index}}
part will not be rendered and therefore the validator doesn't work.
According to Github , to be able to do this was fixed after 1.3, and I'm running 1.5, but so far no luck!
Any tips?
This should work for you, I believe it's an issue with how you are building the name.
Instead of <input name="new_taxid_abroad_{{$index}}"
You should try to build the string like name="{{'new_taxid_abroad_' + $index}}"
If you're using brackets {{ }}, put all of your work inside of them.
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.