У меня есть форма в угловом, что текстовый ввод категории и вход ID. Идентификатор должен быть уникальным для категории. Так что, если у меня есть следующие пункты для Cat1
:Угловые формы. Как получить некоторые данные для переоценки других?
Cat1 - 123
Cat1 - 245
Cat1 - 456
Тогда Если я пытался ввести новый элемент с категорией Cat1
и ид 123
то, что вход не будет уникальным для категории и форма не может быть представленным. Если идентификатор изменился на 1234
, тогда он будет действителен.
Для этого у меня есть пользовательская директива, называемая unique
, которая требует ngModel
. Похоже this-
HTML-
<input name="ID"
required
unique="id in getItemsByCategory(newCategory)"
type="text"
ng-model="newId"></input>
JS-
.directive('unique', function() {
return {
require: '^ngModel',
link: function(scope, ele, attr, ngModelController) {
ngModelController.$validators.unique = function(val) {
var uniqueInRegex = /([^\s]+)\s+in\s([^\s]+)/i;
var matches = attr.unique.match(uniqueInRegex);
var property = matches[1];
var collection = scope.$eval(matches[2]);
for(var i = 0; i < collection.length; i++) {
var item = collection[i];
if(item[property] === val) {
console.log('not unique');
return false;
}
}
console.log('unique');
return true;
};
}
};
});
который работает отлично:
Но если валидатор находит поле не является уникальным в зависимости от категории и изменения поля категории, тогда валидатор не ресевал т.е.
Вот JSBin о том, что то, что видел в этой гифе:
http://jsbin.com/wubesutugo/edit?html,js,output
Есть в любом случае я могу иметь один вход «сенсорные» другой вход, когда он изменяет? Я хочу, чтобы эта директива валидации была общей, потому что у меня есть несколько мест, которые я хотел бы использовать. Поэтому я не хочу эту логику в контроллере.
Я нашел решение, но Я оставлю этот вопрос открытым дольше, если будет лучшее решение. На вкладке «Категория» у меня есть ng-изменение, которое выглядит следующим образом: « ' –