在我的代码中,我从我的服务传递一个JSON对象数组到我的控制器,然后到我的指令,然后被可视化。只有当没有未定义AngularJS
守则控制器:
(function(){
'use strict';
angular.module('dashboardApp').controller('DownloadCtrl', DownloadCtrl);
DownloadCtrl.$inject= ['DownloadService','$scope'];
function DownloadCtrl(DownloadService, $scope){
var self=this;
DownloadService.getRoutes()
.then(function(responseData){
self.routes = responseData.data;
});
}
})();
HTML代码:
<div class="container" ng-controller="DownloadCtrl">
<donut-chart data='download.routes'></donut-chart>
</div>
指令代码:
angular.module('dashboardApp').directive('donutChart',function(){
function link(scope,element,attr){
var dataSet = scope.data;
if(dataSet!==undefined){
var chart = c3.generate({
data: dataSet,
type:'donut'
});
}
};
return {
restrict: 'EA',
link : link,
scope: {
data: '='
}
};
});
如果我范围$看 $ scope.data我注意到。它出现一次,没有数据分配,然后再次出现数据assi指向它。如果我没有dataSet!== undefiend那么代码将失败。
它与当前的设置一起工作,但我觉得有一个更好的方法,而不仅仅是检查是否dataSet!== undefined。我想我可能会以错误的顺序或以不正确的方式完成任务。
我会想办法,让我删除数据集!== undefiend
我通常使用过早返回功能,如果失败'如果(typeof运算scope.data ===“未定义”)确认功能{回报;}'它不返回任何东西,正是如此存在功能早。这样可以防止应该运行的所有主代码引起不必要的缩进。不知道这是否是你想要的解决方案。我可以想到的唯一方法就是始终从数据源中提取scope.data值。 – Tschallacka
感谢您的评论。我可能不得不做那样的事情。这只是在我阅读的所有书籍或教程中没有任何检查,所以我认为还有其他事情正在进行。 – Softey