我試圖創建一個指令來檢查輸入到文本框中的值的唯一性。但是newVal和oldVal總是未定義爲scope。$ 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的價值在我的指令每當價值改變,以便我可以驗證它是否已經存在? –