텍스트 상자에 입력 한 값의 고유성을 검사하는 지시문을 만들려고합니다. 그러나 newVal과 oldVal은 항상 범위가 정의되지 않았기 때문에 $ watch는 ctrl. $ parsers.push() 함수에 래핑됩니다.
누구나 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");
}
});
$ 시계() 파서의 내부'기능 :. 여기
은 지시문에 대한 코드입니다()'(파서가 실행될 때마다 (입력이 변경 될 때마다). – rtcherry입력 해 주셔서 감사합니다. 그것은 이미 많은 도움이됩니다. 값이 변경 될 때마다 ngModel의 값을 내 지시어로 가져 와서 이미 존재하는지 확인할 수있는 방법에 대한 권장 사항이 있습니까? –