2016-06-14 3 views
0

로컬 CSV 파일에서 데이터를 읽는 각도 앱이 있습니다. 그러나 때로는 (시간의 10-20 %) 데이터가 바운드 된 것처럼 보이지 않으므로 내 페이지에 모든 {{data}} 보간이 누락되어 있습니다. 그러나 페이지를 새로 고치면 (때로는 여러 번의 새로 고침이 필요함) 데이터가 결국 나타납니다.데이터가 템플릿에 바인딩되거나 업데이트되지 않습니까?

문제점을 파악할 수 없습니다. 앱이 로컬 CSV 파일에서 데이터를 읽는 중이므로 데이터를 가져 오는 데 문제가 없어야하며 어쨌든 프로세스가 결정적이어야합니다.

또한 데이터를 콘솔에 기록하면 콘솔에 데이터가 적절히 표시됩니다. 어떤 이유로 든 페이지에 표시되지 않습니다. (예 : 내 페이지의 {{company.name}}이 비어 있지만 $scope.company = .... 변수를 설정 한 직후 내 코드에서 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]; 
 
    }); 
 
}]);

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

+0

는 – Vitalii

+0

그래, 내가 JS 콘솔을 확인 - 오류가 없습니다. – grautur

+0

내가 아는 것 같아. csv 로딩 후 다이제스트가 실행되지 않는 문제가 있습니다. $ asyncApply 또는 $ timeout을 사용하여 수동으로 실행해야합니다. pls – Vitalii

답변

-1

각도 새로 고침

<!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>
당신이 사용하는 경우에만보기 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

관련 문제