我正在编写AngularJS指令,当我尝试访问范围变量时,它是undefined
。如果我打印出scope
,我可以清楚地看到该变量有一个值。
检查你的JavaScript控制台,这就是我打印这些内容的地方。
这是一个Plunker事:http://plnkr.co/edit/1cSVZJgtlUazOqTuCNOK
答案 0 :(得分:2)
这是因为在编译<form>
时,尚未编译提供form
值的usernameAvailable
指令,因为它显然是form
的子范围{1}}。您在使用usernameAvaiable
时看到console.log()
值的原因是因为它打印了$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();
}
});
}
};
});
}
}
}]);