如何在角度js中从tsv加载数据后才能呈现指令

时间:2014-07-04 09:26:32

标签: javascript angularjs d3.js tsv

我想整合d3.js和angularjs。我必须绘制一个玲图。数据从tsv文件加载。 我在渲染图时遇到问题,错误是数据尚未加载并且图形呈现。我希望当数据加载到范围变量中时,应该不显示图形。请帮忙。 这是控制器的代码

phonecatControllers.controller('MainCtrl', ['$scope',
     function($scope) {
       d3.tsv("sample.tsv", function(error, data) {
       $scope.d3Data = data;
 });
}]);

这是指令代码

directives.directive('d3Bar', [ function() {
return {
    restrict : 'E',
    scope : {
        data : '='
    },
    link : function(scope, element) {
        scope.$watch('data', function(newData, oldData) {
            drawLine(newData);
        }, true);
    }
}

}

和html是

<body ng-controller='MainCtrl'>
    <d3-bar data='d3Data'></d3-bar>

</body>

2 个答案:

答案 0 :(得分:9)

在条件允许的情况下使用ng-if来解决此问题。

HTML:

<body ng-controller='MainCtrl'>
  <div ng-if="d3Data">
    <d3-bar data='d3Data'></d3-bar>
  <div>
</body>

因此,只有在d3Data有任何数据时才会加载您的指令。

答案 1 :(得分:6)

在手表中放置一个if控件,检查您的数据项是否准备就绪

directives.directive('d3Bar', [function() {
    return {
        restrict : 'E',
        scope : {
            data : '='
        },
        link : function(scope, element) {
            scope.$watch('data', function(newData, oldData) {
                if(newData){
                    drawLine(newData);
                }
            }, true);
        }
    }
}])