变量在范围内未定义,但实际上已定义

时间:2015-08-05 22:58:27

标签: angularjs variables scope directive

我真的很困惑,我不知道到底发生了什么!

.directive("blGraph", ['$http', function($http) {
  return {
    restrict: 'EA',
    scope: {
      botid: "=blGraph"
    },
    link: function(scope, element, attr) {
      console.log(scope, scope.botid);
    }
  };
}]);

结果,

enter image description here

如图所示, botid 存在于范围中,但当我尝试通过scope.botid获取它时,它告诉它不是的定义

3 个答案:

答案 0 :(得分:1)

在范围变量上加上$ watch。控制将在手表处理程序功能中进行两次。你会看到发生了什么。 你的HTML标记是什么,可能是你绑定到undefined。

答案 1 :(得分:1)

由于运行控制器和链接函数的顺序,您需要使用$ timeout以允许变量加载到作用域。以下是我如何解决它:

  controller: function($scope, $timeout) {
     $timeout(function(){
        console.log($scope.myVariable)
     },0);
  }

答案 2 :(得分:0)

最有可能的是,scope.botid在打印时未定义,并且是在console.log语句之后定义的。

在对象上使用console.log时,它会在JS执行结束时显示对象的状态。

请尝试以下方法,而不是仅在console.log语句中使用范围:

console.log(JSON.stringify(scope), scope.botid);