AngularJS将json传递给指令

时间:2014-05-09 09:04:36

标签: angularjs angularjs-directive angularjs-scope

我仍然是Angular的新人,但我正在取得一些进展..我认为:) 我有问题使用隔离范围将json文件从控制器传递到指令。

这是我的控制器,它与工厂" dataArchive":

交谈
.controller('graphCtrl', ['$scope', 'dataArchive', function($scope, dataArchive){
    dataArchive.get().then(function(data){
        $scope.getData = data;
    });
}]);

然后我有使用隔离范围的指令。

.directive('dataGraph', function($compile){
    return {
        restrict: 'AE',
        replace: true,
        scope: {
            getArchiveData: '='
        },
        template: '<div id="chartdiv"></div>',
        link: function (scope, element, attrs){
             var dati = scope.getArchiveData;
             console.log(dati);
        };
     };
 });

这是我的HTML:

<div ng-controller="graphCtrl">
    <data-graph get-archive-data="getData"></data-graph>
</div>

在控制台中,我总是得到“未定义的”#。

我错了,这是一个好方法吗?

谢谢大家。

1 个答案:

答案 0 :(得分:1)

由于此代码是异步的:

dataArchive.get().then(function(data){
        $scope.getData = data;
    });

link函数将在getData上设置数据之前运行,因此此时不会设置隔离的范围变量。所以,我相信你看到了时间问题。

确保指令绑定正确无误。尝试将$scope.getData设置为静态值(例如$scope.getData = [{ data: 'value'}])。这应该有用。

此外,Angular根据对象引用检查更改(重新绑定)。因此,您可能需要在控制器中定义$scope.getData(在异步调用之外)。然后你可能想要push所有数据(而不是用赋值替换整个对象)。

希望这有帮助。