Javascript 范围包含值,但在访问它时,它';没有定义

Javascript 范围包含值,但在访问它时,它';没有定义,javascript,angularjs,angularjs-directive,Javascript,Angularjs,Angularjs Directive,我正在编写一个AngularJS指令,当我试图访问一个范围变量时,它是未定义的。如果我打印出范围,我可以清楚地看到变量有一个值 检查你的JavaScript控制台,这就是我打印这些东西的地方 这里有一个问题:这是因为指令在编译usernameavable时尚未编译,因为它显然是表单的子范围,为表单值提供值。使用console.log()时,之所以会看到usernameavable值,是因为它会打印$scope对象的值(这意味着它拥有的最新值)。如果您真的想访问这样的值,一个解决方法是使用来访问该

我正在编写一个AngularJS指令,当我试图访问一个范围变量时,它是未定义的。如果我打印出
范围
,我可以清楚地看到变量有一个值

检查你的JavaScript控制台,这就是我打印这些东西的地方


这里有一个问题:

这是因为
指令在编译
usernameavable
时尚未编译,因为它显然是
表单
的子范围,为
表单
值提供值。使用
console.log()
时,之所以会看到
usernameavable
值,是因为它会打印
$scope
对象的值(这意味着它拥有的最新值)。如果您真的想访问这样的值,一个解决方法是使用来访问该值

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();
              }
            });
          }
        };  
      });

    }
  }
}]);

设置
调试器断点显示
作用域。usernameAvailable
在所有三个阶段都未定义。问题是,当您记录javascript对象以进行控制台时,仅在展开该对象后才会捕获数据。尝试
console.log(Object.assign({},scope))您将看到它是未定义的。