我有以下的(https://jsfiddle.net/f30bj43t/5/)HTML:Angular定製驗證指令。獲得從視圖模型錯誤
<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,我有控制器給了我那個錯誤......這也是我想要解決的問題。 –