私は今、いくつかのアプローチを試みました。
アプローチ1
サーバーからデータをロードするメソッドがあります。これは私のコントローラーにあります:
$scope.loadResults = function() {
var url = "MY URL";
$http.get(url).success(
function(data, status, headers, config) {
var tempResults=[];
for (var i = 0; i < data.length; i++) {
tempResults.push({date: data[i].date, p: data[i].p, result: data[i].result});
}
$scope.results = tempResults;
$scope.drawChart(); //THIS IS THE METHOD I WANT TO RUN (this is approach number #1)
}
);
};
そして、これが私の描画チャートメソッドです(コントローラーでも):
$scope.drawChart = function(){
var r = Raphael("pie");
var tempTypeDistribution = [];
for (var j = 0; j < 7; j++) {
tempTypeDistribution.push($scope.typeCount(j));
}
$scope.typeDistribution=tempTypeDistribution;
if($scope.typePie){
$scope.typePie.clear();
}
$scope.typePie = r.piechart(120, 120, 90, $scope.typeDistribution,
{
legend: ["%% - A", "%% - B", "%% - C", "%% - D", "%% - E", "%% - F", "%% - G"],
legendpos: "east"
}
);
};
これは動作しません。グラフは描画されますが、エラーがあります。追加すると次の$scope.$apply();
エラーが発生します: Error: $digest already in progress
safeApply を追加しても何も起こりません。
アプローチ 2
私のdirectives.jsで、次のウォッチャーを作成しましたresults
:
App.directive('chart', function(){
return{
restrict: 'E',
link: function(scope, elem, attrs){
var data = scope[attrs.ngModel];
scope.$watch('results', function(v){
var r = Raphael("pie");
var tempTypeDistribution = [];
for (var j = 0; j < 7; j++) {
tempTypeDistribution.push(scope.typeCount(j));
}
if(scope.typePie){
scope.typePie.clear();
}
scope.typePie = r.piechart(120, 120, 90, tempTypeDistribution,
{
{
legend: ["%% - A", "%% - B", "%% - C", "%% - D", "%% - E", "%% - F", "%% - G"],
legendpos: "east"
}
});
scope.$apply();
});
}
};
});
繰り返しますが、これは機能しません。チャートは描画されますが、エラーがあります。追加すると次のscope.$apply();
エラーが発生します: Error: $digest already in progress
safeApply を追加しても何も起こりません。
アプローチ 3
ビューにボタンを作成しました:
<div id="pie">
<chart ng-model='data'> </chart>
</div>
<button class="btn btn-success" type="submit" ng-click="drawChart()" tabindex="3">draw</button>
そして、それをクリックすると、チャートは完全に正確に描画されます。しかし、「結果」が変更されたときにチャートを自動的に再描画したい。したがって、ディレクティブを使用する必要がありますが、明らかに機能しません。誰でも助けることができますか?