Работа с диаграммой js и ее выполнение, чтобы сделать то, что мне нужно, которое извлекает данные из веб-службы и использует $interval
для ее обновления. Когда я обновляю диаграмму с помощью встроенной функции обновления, она отображается снова, как ожидалось, но со старыми данными в ней. Я думал, что я очищаю данные из массива, я новичок в угловом, поэтому, возможно, я что-то упустил.Обновления диаграммы пончиков с удвоенной информацией
Это js для того, что происходит.
angular.module('myapp', [])
.controller('MainCtrl', function($scope, $http, $interval) {
$scope.doughnutData = [];
var myDoughnut = '';
onload = function() {
$http.get('https://api.myjson.com/bins/59zvx').success(function(returnedData) {
$scope.username = returnedData.name;
$scope.totalscore = returnedData.totalScore.toFixed(3);
returnedData.models.forEach(function(x) {
var score = x.score.toFixed(3);
console.debug(score);
if (score >= 75) {
$scope.doughnutData.push({
'value': x.score,
'color': '#F7464A',
'highlight': '#FF5A5E',
'label': x.name
});
} else if (score >= 50) {
$scope.doughnutData.push({
'value': x.score,
'color': '#FDB45C',
'highlight': '#FFC870',
'label': x.name
});
} else {
$scope.doughnutData.push({
'value': x.score,
'color': '#424242',
'highlight': '#686868',
'label': x.name
});
}
});
$scope.doughnutData = sortByKey($scope.doughnutData, 'value');
var ctx = document.getElementById("chart-area").getContext("2d");
myDoughnut = new Chart(ctx).Doughnut($scope.doughnutData, {
responsive: true
});
});
mainInterval = $interval(function() {
doughnutData = '';
$http.get('https://api.myjson.com/bins/59zvx').success(function(returnedData) {
$scope.username = returnedData.name;
$scope.totalscore = returnedData.totalScore.toFixed(3);
returnedData.models.forEach(function(x) {
var score = x.score.toFixed(3);
console.debug(score);
if (score >= 75) {
$scope.doughnutData.push({
'value': x.score,
'color': '#F7464A',
'highlight': '#FF5A5E',
'label': x.name
});
} else if (score >= 50) {
$scope.doughnutData.push({
'value': x.score,
'color': '#FDB45C',
'highlight': '#FFC870',
'label': x.name
});
} else {
$scope.doughnutData.push({
'value': x.score,
'color': '#424242',
'highlight': '#686868',
'label': x.name
});
}
});
$scope.doughnutData = sortByKey($scope.doughnutData, 'value');
myDoughnut.segments = doughnutData;
myDoughnut.update();
});
}, 5000);
$scope.$apply();
};
function sortByKey(array, key) {
return array.sort(function(a, b) {
var x = a[key];
var y = b[key];
return ((x < y) ? -1 : ((x > y) ? 1 : 0));
});
}
});
Так начинается с 9 значений, и при обновлении он имеет 18, и т.д .. Там нет ничего о себе, что будет обновлять (я просто его там теперь, когда я переместить его в моей производственной WebService). Я думал, что doughnutData = '';
в разделе $interval
очистит его?
Требуется включить HTML, а также, чтобы дать лучшее представление о том, что происходит:
<html>
<head>
<script src="https://code.jquery.com/jquery-2.1.4.min.js"></script>
<script src="../Chart.js"></script>
<script src="../src/Chart.Doughnut.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.3.15/angular.min.js"></script>
<link rel="stylesheet" href="style.css" />
<script src="../script.js"></script>
</head>
<body ng-app="myapp" ng-controller="MainCtrl">
<div id="canvas-holder">
<canvas id="chart-area" width="50" height="50"></canvas>
</div>
</body>
</html>
Да, я пробовал это в прошлом, но вызывает ряд других ошибок. – erp
Какие ошибки? – jcmiller11
В нижней части '$ interval' он говорит в этой строке' myDoughnut.segments = doughnutData; '' 'doughnutData' не определен. И если я изменю эту строку на 'myDoughnut.segments = $ scope.doughnutData ;, тогда она скажет, что функция обновления не работает. – erp