2016-06-14 19 views
0

私は、ローカルのCSVファイルからデータを読み取る角度アプリを持っています。しかし、時には(たぶん10〜20%の時間)、データが拘束されていないように見えるので、私のページにはすべて{{data}}の補間がありません。しかし、ページをリフレッシュすると(複数回のリフレッシュが必要になることもあります)、最終的にデータが表示されます。データはテンプレートにバインド/更新されませんか?

私は問題が何であるか把握できません。アプリケーションはローカルのCSVファイルからデータを読み取っているだけなので、データを取得するのに問題があってはなりません。また、プロセスは決まっているはずです。

また、データをコンソールに記録すると、コンソールにデータが適切に表示されます。何らかの理由でページに表示されないだけです。 (たとえば、{{company.name}}が空白ですが、変数を設定した直後にconsole.log(company.name)をコードに書き込むと、私のコンソールに会社名が表示されます)。

問題の原因は何ですか? Angularが何らかの理由で変数が設定/更新されていることを知らないという問題はありますか?

EDIT:これは私のコントローラとHTMLが多かれ少なかれ見えるものです。

var app = angular.module("app", ["ngRoute", "ngSanitize"]); 
 

 
app.controller("CompaniesController", ["$scope", "$http", "$routeParams", "$window", "FlashService", "$location", function($scope, $http, $routeParams, $window, FlashService, $location) { 
 
    $scope.data = []; 
 
    
 
    $scope.index = parseInt($routeParams.i === undefined ? 0 : $routeParams.i); 
 
    
 
    d3.csv("data/data.csv", function(data) { 
 
    $scope.data = data; 
 
    $scope.company = $scope.data[$scope.index]; 
 
    }); 
 
}]);

<!DOCTYPE html> 
 

 
<head> 
 
    
 
    <title>Foo</title> 
 
    <script src="assets/js/d3.min.js"></script> 
 
    
 
    <script src="assets/js/jquery.min.js"></script> 
 
    <script src="assets/js/underscore.min.js"></script> 
 
    
 
    <script src="assets/js/angular.min.js"></script> 
 
    <script src="assets/js/angular-route.min.js"></script>  
 
    <script src="assets/js/angular-sanitize.min.js"></script> 
 

 
    <script src="app.js"></script> 
 
    <script src="routes.js"></script> 
 
</head> 
 

 
<body ng-app="app"> 
 
    
 
<div ng-view></div> 
 

 
</body> 
 

 
</html>

<h1>{{company.name}}</h1>

+0

まず、エラーのコンソールを確認してください。 – Vitalii

+0

私はJSコンソールをチェックしました。エラーはありません。 – grautur

+0

私は知っていると思います。問題は、csvの読み込み後にダイジェストが実行されないことです。 $ asyncApplyまたは$ timeoutを使用して手動で実行する必要があります。pls – Vitalii

答えて

-1

角度は、あなたが使用している場合にのみ表示を更新しますXHRを作るために$http

ここでは、外の世界をd3.csvで呼び出します。したがって、データが利用可能なときに、消化を実行するにはAngularに指示する必要があります。

d3.csv("data/data.csv", function(data) { 
    $scope.data = data; 
    $scope.company = $scope.data[$scope.index]; 
    $scope.$apply(); // here 
    }); 
+0

$ scopeを使用しています。$ apply();非常に悪い考えです。すでに進行中の$ digestはランダムな時間に取得できます。これをしないで、他人に助言しないでください – Vitalii

関連する問題