У меня есть следующие (https://jsfiddle.net/f30bj43t/5/) HTML:Угловая настраиваемая директива валидации. Получить ошибки из модели представления
<div ng-controller="DataController as vm">
<div ng-repeat="name in vm.users track by $index">{{name}}</div>
<form name="form" validation="vm.errors">
<input validator ng-model="vm.name" name="vm.name" placeholder="name" type="text" />
<a href="#" ng-click="vm.add(vm.name)">Add</a>
</form>
</div>
Эта форма добавляет имена в список и контроллер является:
app.controller("DataController", DataController);
function DataController() {
var vm = this;
vm.name = "Mary";
vm.users = ["Alice", "Peter"];
vm.errors = [];
vm.add = function(name) {
if (name == "Mary") {
var error = { property: "name", message: "name cannot be Mary"};
if (vm.errors.length == 0)
vm.errors.push(error);
} else {
vm.users.push(name);
vm.errors = [];
}
}
}
На форме я добавил validation="vm.errors"
который определяет, какая переменная содержит ошибки, которые должны использоваться в каждом валидатор ...
Th еп в каждом валидатора директивы Я буду использовать эту переменную, чтобы выбрать правильную ошибку и отобразить его ...
app.directive("validation", validation);
function validation() {
var validation = {
controller: ["$scope", controller],
replace: false,
restrict: "A",
scope: {
validation: "="
}
};
return validation;
function controller($scope) {
this.getErrors = function() {
return $scope.validation;
}
}
}
app.directive("validator", validator);
function validator() {
var validator = {
link: link,
replace: false,
require: "^validation",
restrict: "A"
};
return validator;
function link(scope, element, attributes, controller) {
var errors = controller.getErrors();
console.log(errors);
// do something with errors
}
}
ПРОБЛЕМА
В функции связи директивы валидатор мне нужно отслеживать изменения переменной, прошедшей проверку = "vm.errors", поэтому я могу в каждом валидаторе проверить, произошла ли ошибка и принять меры.
Но console.log (ошибки), кажется, не имеют никакого эффекта ...
Как я могу решить эту проблему?
испытаны ли вы свой JSFiddle? Он работает неправильно –
Просто обновил его: https://jsfiddle.net/f30bj43t/5/. Кстати, проблема с предыдущим скрипачом заключалась в том, что перемещение валидатора из формы в внешний div, где у меня есть контроллер, дает мне эту ошибку ... Это то, что я тоже хотел решить. –