我正在尝试创建一个指令来检查输入到文本框中的值的唯一性。但是一旦 scope.$watch 被包装到 ctrl.$parsers.push() 函数中,newVal 和 oldVal 总是未定义。
有人知道为什么 newVal 和 oldVal 未定义吗?
这是JSFiddle:
http://jsfiddle.net/charms/v6ttW/7/
HTML
<div ng-app="myApp" ng-controller="TestCtrl">
{{testVar}}
<form novalidate>
<input type="text" name="user.email" ng-model="user.email" email-used="/api/user"/>
</form>
</div>
Angularjs
angular.module('myApp', [])
.controller('TestCtrl', ['$scope',function($scope) {
$scope.user = {email: 'abc', name: 'myname'};
$scope.testVar = "Test";
}])
.directive('emailUsed', [function() {
return {
require: 'ngModel',
link: function(scope, elem, attr, ctrl) {
console.log("executing");
ctrl.$parsers.push(function() {
ctrl.$setValidity('eaCheckingUniqueValue', true);
if(ctrl.$valid) {
console.log("valid");
scope.oldValues = [];
scope.$watch(attr.ngModel, function(newVal, oldVal) {
scope.oldValues.push(newVal);
console.log("new value is: " + newVal);
});
console.log("valid is true");
} else {
console.log("valid is false");
}
});