usernameAvailable
がコンパイルされたとき、それはform
の子スコープが明確であるため、form
値の値を提供し<form>
ディレクティブは、まだコンパイルされていないためです。 console.log()
を使用するときにusernameAvaiable
の値が表示されるのは、$scope
オブジェクトのreference(これは最新の値を意味します)を出力するためです。このような値に実際にアクセスしたい場合は、回避策として$timeout()を使用して値にアクセスします。 `デバッガの設定
DEMO
app.directive('usernameAvailable', ['$http', '$q', '$timeout', function($http, $q, $timeout) {
return {
restrict: 'A',
require: 'ngModel',
scope: {
usernameAvailable: '='
},
link: function(scope, elem, attr, controller) {
$timeout(function() {
scope.usernameAvailable.$asyncValidators.usernameAvailable = function(username) {
if (typeof(getCurrentUsername) != 'undefined' && username == getCurrentUsername()) {
return $q.resolve();
} else {
return $http.get('/user/usernameAvailable?username=' + username).success(function(result) {
if (result) {
return $q.resolve();
} else {
return $q.reject();
}
});
}
};
});
}
}
}]);
、3つのすべての段階で未定義として'各ログ・コールの前にブレークポイントは 'scope.usernameAvailable'を示しています。 – C14L
問題は、コンソールにjavascriptオブジェクトを記録すると、オブジェクトを展開した後にのみデータがキャプチャされるということです。 'console.log(Object.assign({}、scope));}を試してください。それは未定義です。 – Schlaus