2015-01-19 2 views
0

Это использовалось для меня все время, используя $ scope. $ Apply на $ http-запросы, чего я не вижу на этом? Я сначала получил «Цикл дайджеста уже идет» msg, чем добавил setTimeout(), который избавился от этого сообщения, но все же ng-repeat не обновит данные. Это не должно быть проблемой, я явно что-то пропустил.

HTML-:

<form name="userDataForm" role="form" ng-submit="submit()"> 
<input type="text" name="userId" placeholder="Enter User ID" ng-model="viewModel.useId" /> 
<input type="text" name="start" placeholder="Start Date: dd-mm-yyyy" ng-model="viewModel.startDate"/> 
<input type="text" name="end" placeholder="End Date: dd-mm-yyyy" ng-model="viewModel.endDate"/><br/> 

<button type="submit"> 
    Get Data 
</button> 
<ul ng-repeat="place in viewModel.userData.data.significant_places"> 
    <li> 
     You have been at <span style="color:red;">{{place.name}}</span> <span style="color:red;">{{place.number_of_days}}</span> days this month 
    </li> 
<ul> 

JS

$scope.viewModel = { 
    userId:'', 
    startDate:'', 
    endDate:'', 
    userData:{} 
}; 
$scope.submit = function(){ 
       setTimeout(function(){ 
        $scope.$apply(function(){ 
         $http.get('http://localhost:3000/?user_id=279&start=20150101&end=20150113').success(function(data){ 
          $scope.viewModel.userData = data; 
         }).error(function(){ 
          console.log('error'); 
         }); 
        }); 
       }, 1) 


}; 
+0

Вы должны добавить информацию о вашей цели здесь. Инстинктивно я не думаю, что это самый простой способ сделать это. – Casey

+0

Почему бы вам не наложить свой http-вызов на '$ apply'? Также ваши возвращаемые данные содержат данные: {significant_places: [... '? – zeroflagL

ответ

0

Это должно работать нормально:

$scope.viewModel = { 
    userId:'', 
    startDate:'', 
    endDate:'', 
    userData:{} 
}; 
$scope.submit = function(){ 

    $http.get('http://localhost:3000/?user_id=279&start=20150101&end=20150113').success(function(data){ 
     $scope.viewModel.userData = data; 
    }).error(function(){ 
     console.log('error'); 
    }); 

}; 

Есть очень мало случаев, когда необходимо нужно использовать $scope.$apply самостоятельно. Угловая почти всегда делает это за вас (вот почему вы получаете эту ошибку).

+0

Спасибо, в конце концов, это была проблема на моей стороне, где я искал неправильный json stractur. моя вина. –