Angularjs 无法在amchart指令数据提供程序内显示使用服务注入的JSON数据
我使用amcharts作为自定义指令。现在我想使用webservices从$http.get服务的输出中获取这个AmChart的数据提供者 但我无法将此动态分配给amChart的数据提供程序Angularjs 无法在amchart指令数据提供程序内显示使用服务注入的JSON数据,angularjs,angularjs-directive,angularjs-scope,amcharts,Angularjs,Angularjs Directive,Angularjs Scope,Amcharts,我使用amcharts作为自定义指令。现在我想使用webservices从$http.get服务的输出中获取这个AmChart的数据提供者 但我无法将此动态分配给amChart的数据提供程序 var app=angular.module('mainApp',[]); app.service('dataProviderService',function($http){ this.getData= function(){ re
var app=angular.module('mainApp',[]);
app.service('dataProviderService',function($http){
this.getData= function(){
return $http.get('jaxrs/WebService/getJSONData');
};
});
app.directive('myChart',['dataProviderService',function (dataProviderService) {
return {
restrict: 'E',
replace:true,
template: '<div id="chartdiv" style="min-width: 310px; height: 400px; margin: 0 auto"></div>',
link: function (scope, element, attrs) {
scope.data={};
dataProviderService.getData().then(function(response){
scope.data=response.data;
},function(error){
scope.status="Show error";
});
var chart = false;
var initChart = function() {
if (chart) chart.destroy();
var config = scope.config || {};
chart = AmCharts.makeChart( "chartdiv", {
"theme": "none",
"type": "serial",
"dataProvider": dataProviderService.newData(),
"categoryField": "OT",
"depth3D": 20,
"angle": 30,
"categoryAxis": {
"labelRotation": 90,
"gridPosition": "start"
},
"valueAxes": [ {
"title": "availability"
} ],
"graphs": [ {
"valueField": "availability",
"colorField": "color",
"type": "column",
"lineAlpha": 0.1,
"fillAlphas": 1
} ],
"chartCursor": {
"cursorAlpha": 0,
"zoomable": false,
"categoryBalloonEnabled": false
},
"export": {
"enabled": true
}
} );
};
initChart();
}//end watch
}
}]) ;
var-app=angular.module('mainApp',[]);
app.service('dataProviderService',函数($http){
this.getData=function(){
返回$http.get('jaxrs/WebService/getJSONData');
};
});
应用程序指令('myChart',['dataProviderService',函数(dataProviderService){
返回{
限制:'E',
替换:正确,
模板:“”,
链接:函数(范围、元素、属性){
scope.data={};
dataProviderService.getData().then(函数(响应){
scope.data=response.data;
},函数(错误){
scope.status=“显示错误”;
});
var图=假;
var initChart=函数(){
if(chart)chart.destroy();
var config=scope.config | |{};
chart=AmCharts.makeChart(“chartdiv”{
“主题”:“无”,
“类型”:“串行”,
“dataProvider”:dataProviderService.newData(),
“类别字段”:“OT”,
“深度3D”:20,
“角度”:30,
“分类法”:{
“唇瓣旋转”:90,
“网格位置”:“开始”
},
“valueAxes”:[{
“标题”:“可用性”
} ],
“图表”:[{
“valueField”:“可用性”,
“颜色字段”:“颜色”,
“类型”:“列”,
“lineAlpha”:0.1,
“填充字母”:1
} ],
“图表光标”:{
“cursorAlpha”:0,
“可缩放”:错误,
“CategoryBallooneEnabled”:false
},
“出口”:{
“已启用”:真
}
} );
};
initChart();
}//了望台
}
}]) ;
假设您的newData()
方法是一个异步的$http.get()
请求,就像您的getData()
方法一样,您需要在请求自行解析后调用makeChart,或者在请求自行解析时调用validateData()
来告诉图表重新绘制自己。下面是在图表的init
事件中执行此操作的示例:
chart = AmCharts.makeChart( "chartdiv", {
// ... omitted ...
"dataProvider": [],
// ... omitted ...
"listeners": [{
"event": "init",
"method": function(e) {
dataProviderService.newData().then(function(response) {
e.chart.dataProvider = response;
e.chart.validateData();
}, function(error) {
// do something else
});
}
}]
} );
假设您的
newData()
方法是一个异步$http.get()
请求,就像您的getData()
方法一样,您需要在请求自行解析后调用makeChart,或者在请求自行解析时通过调用validateData()
通知图表重新绘制。下面是在图表的init
事件中执行此操作的示例:
chart = AmCharts.makeChart( "chartdiv", {
// ... omitted ...
"dataProvider": [],
// ... omitted ...
"listeners": [{
"event": "init",
"method": function(e) {
dataProviderService.newData().then(function(response) {
e.chart.dataProvider = response;
e.chart.validateData();
}, function(error) {
// do something else
});
}
}]
} );
dataProviderService.newData()是打字错误吗?没有newData()
定义。是gerric。。。dataProviderService.newData()是一个打字错误。。。我打算使用scope.data作为图表的数据提供程序。dataProviderService.newData()
a打字错误吗?没有newData()
定义。是gerric。。。dataProviderService.newData()是一个打字错误。。。我打算使用scope.data作为图表的数据提供程序。