2012-12-07 5 views
1

저는 현재 첫 번째 각도 앱을 만들려고 노력 중이며 약간의 도움이 필요합니다.

angular.module('wtrack', ['ngResource']). 
    factory('WtrackAPI', function($resource) { 
     var WtrackAPI = $resource('http://hostname/wtrack/api/w/:id'); 
     return WtrackAPI; 
    }); 

을 그리고 이것은 내 컨트롤러 :

나는 표준 $ 자원 활동으로 REST 서비스에 액세스하고있어 내가 원하는 것 무엇

function ListCtrl($scope, $timeout, WtrackAPI){ 

    $scope.wdata = WtrackAPI.query(); // a list of objects displayed in my view 

    $scope.addEntry = function() { // adding an object to the list 
     console.log("Adding Entry"); 
     var entry = {day: $scope.wdata.day, value: $scope.wdata.value}; 
     WtrackAPI.save(entry, 
          function(){console.log("WTF do I need to do here to rerun WtrackAPI.query()");}); 
    }; 

} 

기본적으로 내 모델을 업데이트입니다 다시 한번 $scope.wdata = WtrackAPI.query();을 실행하면 save()가 완료됩니다. 나는 각도 방법이 단지 $scope.wdata.push(entry) 일 것이라고 의심하지만,이 경우 데이터베이스는 트리거를 사용하여 항목에 일부 데이터를 추가하고 복잡한 정렬을 수행하므로 쿼리를 사용하여 전체 목록을 왕복 이동하고 다시로드하려고합니다. 어떻게해야합니까? 단지 $ scope가 거기에 존재하지 않으므로 저장 콜백에서 $scope.wdata = WtrackAPI.query();을 호출하면 작동하지 않습니다. 나는 $ emit과 $ rootScope 등으로 몇 가지 다른 것들을 시도했지만, 그 모든 것들이 나를 혼란스럽게 만들었다. 그래서 제발, 아무도 나에게 그 적절한 방법이 무엇인지에 대한 힌트를 줄 수 있습니까?

function ListCtrl($scope, $timeout, WtrackAPI){ 

    $scope.wdata = WtrackAPI.query(); // a list of objects displayed in my view 

    $scope.addEntry = function() { // adding an object to the list 

     var entry = {day: $scope.wdata.day, value: $scope.wdata.value}; 
     WtrackAPI.save(entry, function() { 
      //$scope should be accessible here 
      $scope.wdata = WtrackAPI.query(); 
     }); 
    }; 
} 

답변

4

$scope 객체는 폐쇄 범위에 액세스 할 수 있어야합니다. 나는 청소기 모델 업데이트를이 추천 : 해당 리소스가 응답하기 전에, 당신이 공백 scope.wdata $이있을 것이다, 때문에

function ListCtrl($scope, $timeout, WtrackAPI){ 
     $scope.queryWData = function() { 
      WtrackAPI.query(function(response){ 
       // set the wdata here, in the callback 
       $scope.wdata = response; 
      }) 
     }; 
     $scope.addEntry = function() { // adding an object to the list 
      console.log("Adding Entry"); 
      var entry = {day: $scope.wdata.day, value: $scope.wdata.value}; 
      WtrackAPI.save(entry, 
       function(){ 
        $scope.queryWData(); 
       }); 
     }; 
     $scope.queryWData(); 
    } 

나는, 철처 $resource 동일 $scope.wdata 설정에 대해 추천 할 것입니다. 이렇게하면 모델이 실제로 업데이트되기 전에 중요한 내용이 깜박입니다.

이를 해결하려면

, 우리는

+0

그래 이제 나는 소음 및 덕분에 많이 미안 그 밖의 다른 곳에서 무언가를 엉망으로해야합니다, 작동 $resource 콜백에 $scope.wdata을 설정합니다. –

+0

비슷한 문제로 저를 도왔습니다. – user1713964

5

허용 대답이 일시적으로 당신에게 빈 모델의 플래시를 줄 것이다 : 당신이 쓸 수 있어야하므로

+0

두 번째 요청이 과도한 것으로 보입니다. 적어도 나머지 API에서는 PUT/POST 응답에 업데이트 된 (그리고 아마도 서버에 의해 변경된) 객체가 포함되어 있습니다. – molecular

관련 문제