【发布时间】:2016-08-16 00:01:13
【问题描述】:
我有以下 (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" 定义了哪个变量包含要在每个 validator 指令中使用的错误...
然后在每个 validator 指令中,我将使用该变量来选择正确的错误并显示它...
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
}
}
问题
在验证器的链接函数指令中,我需要跟踪validation="vm.errors"传递的变量的变化,这样我就可以在每个验证器中检查是否发生错误并采取措施。
但是console.log(errors) 好像没有效果...
我该如何解决这个问题?
【问题讨论】:
-
你测试过你的 JSFiddle 吗?它工作不正常
-
刚刚更新:jsfiddle.net/f30bj43t/5。顺便说一句,前一个提琴手的问题是,将验证器从表单移动到我有控制器的外部 div 给了我这个错误......这也是我想解决的问题。
标签: angularjs