4

model.data包含以下内容:

{
    "name": "Jamie",
    "age": 25
}  

我有一个看起来像这样的指令:

<my-directive data="model.data"></my-directive>  

我已将指令定义如下:

app.directive('myDirective', function(){  
    return {
        restrict: 'E',
        scope: {
            data: '='
        },
        templateUrl: 'grid.html',
        controller: function($scope) {
            console.log($scope);
            console.log($scope.data);
        }
    }
}

问题是console.log($scope)返回 $scope 中的值。我可以看到它包含数据:

{
    $$asyncQueue: Array[0],
    $$childHead: null,
    ...
    ...
    data: Array[1]
}

但是,console.log($scope.data)返回undefined. 任何线索为什么?

4

1 回答 1

9

任何时候类似的console.log($scope);工作,但console.log($scope.someProperty);没有,这是因为someProperty正在设置作为解决承诺的结果(例如 $http 调用或使用 $q 创建的承诺)。

第一个日志似乎可以工作,而实际发生的情况是,当您手动查看日志条目(即单击以展开其内容)时,该值已被填充/解析。

在您的控制器中,您需要 $watch 属性,并设置 watch 回调函数以在数据到达/解决后执行您想要对数据执行的任何操作。

于 2013-03-09T15:31:12.753 回答