2012-12-07 94 views
1

我目前正在嘗試構建我的第一個角度應用程序,而且我可能需要一些幫助。

我訪問REST服務的標準$資源行動:

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

這是我的控制器:

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()");}); 
    }; 

} 

什麼我想要做的基本上是更新我的模型一旦save()完成,再次執行$scope.wdata = WtrackAPI.query();。我懷疑角度的方式只是$scope.wdata.push(entry),但在這種情況下,數據庫使用觸發器向條目添加一些數據並執行一些複雜的排序,所以我真的想要使用查詢來返回並重新加載整個列表。我怎樣才能做到這一點?在保存回調中調用$scope.wdata = WtrackAPI.query();不起作用,因爲$ scope在那裏顯然不存在。我用$ emit和$ rootScope等嘗試了一些其他的東西,但所有這些讓我非常困惑。所以,請大家給我一個關於什麼是正確的方式來做到這一點暗示?

回答

4

$scope對象應該是在封閉範圍訪問,所以你應該能夠寫:

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(); 
     }); 
    }; 
} 
+0

呀現在的作品,我一定是搞砸了別的東西別的地方,遺憾的噪音和感謝很多設置$scope.wdata。 –

+0

非常感謝你幫助我解決類似的問題! – user1713964

5

接受的答案會給你一個空白模型的一個瞬間閃過。我建議這個更清潔模型更新:

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(); 
    } 

我會建議不要設置$scope.wdata等於$resource顧左右而言他,因爲,在此之前的資源迴應,您將會有$ scope.wdata是空白。這會在您的模型實際更新之前造成空白內容的大量閃現。

爲了改善這種情況,我們在$resource回調

+0

第二個請求似乎矯枉過正。至少在我的rest API中,PUT/POST響應中包含更新(並可能由服務器更改)的對象。 – molecular