2014-05-10 46 views
2

oficial docs沒有寫回調函數。

我的服務:

angular.module('myApp') 
    .factory('Thing', ['$resource', 
    function ($resource) { 
     return $resource('/api/things/:id', { id: 'all' }, {}); 
    } 
); 

,我已經控制器:

angular.module('myApp') 
    .controller('ThingCtrl', ['$scope', '$location', '$routeParams', 'Thing', 
    function ($scope, $location, $routeParams, Thing) { 

     Thing.get({id: $routeParams.thingId}, function(thing) { 
     // This callback i found in example 
     $scope.thing = thing; 
     }); 

     $scope.save = function() { 
     Thing.save({id: $scope.thing._id}, $scope.thing, function() { 
      // This callback i found using brute force. It run when respond OK (200) 
     }); 
     }; 
    } 
    ]); 

我想知道如何使用這個回調。 我想知道什麼需要這個回調。

任何人都可以幫助我嗎?

p.s.對不起,如果我的英語不是很好......

+0

回調是服務器的迴應,所以無論你有什麼設置。 – tymeJV

+0

當.get回調是第二個參數,並採取回應,也許別的東西? – pofigizm

+0

當.save回調是第三個參數,並採取...我不知道? – pofigizm

回答

1

經過一番挖掘到的源代碼(版本1.2.16),事實證明,每個實例方法可以接收到3個參數:

  1. [可選]參數,例如({id: 'some-ID'})。
  2. [可選]成功回調。
  3. [可選]一個錯誤回調。

成功/錯誤回調一旦收到響應就會被調用。


的回調收到以下參數:

  • 成功回調: 一個。該對象(例如thing)。 b。頭文件getter函數。

  • 錯誤回調: a。該對象(例如thing)。


如果你真的仔細閱讀文檔,你就能發現它有什麼地方:

值得一提的是,對於GET,查詢等方法的成功回調被傳遞在來自服務器以及$ HTTP頭getter函數[...]響應:

var User = $resource('/user/:userId', {userId:'@id'}); 
User.get({userId:123}, function (user, getResponseHeaders) { 
    user.abc = true; 
    user.$save(function (usr, putResponseHeaders) { 
     //usr => saved user object 
     //putResponseHeaders => $http header getter 
    }); 
}); 

UPDATE

存在資源和資源實例之間一個重要的(和不那麼明顯)的區別。

資源通過調用$resource服務返回對象。
資源實例對象通過調用方法返回資源對象。

爲了澄清,在這個例子中:

var User = $resource('/user/:userId', {userId:'@id'}); 
var user = User.get({userId:123}); 
  • User是資源對象(因爲它是通過調用$resource(...)返回)。
  • user是資源實例對象(因爲它是通過調用一資源對象,即User.get()方法返回)。現在

,資源類對象在定義每個動作「靜態」的方法。
rsource 實例 object _是資源類型的一個實例,所有非GET方法都可以使用$ prefix_。

換句話說,User類)具有靜態方法get()save()delete()等 而user實例)已經前綴,非GET方法,例如$save()$delete()等(但不包括$get()或`$ query())。

非靜態方法接收前面描述的參數。
靜態GET方法也會接收相同的參數(如前所述) 靜態非GET方法會接收額外的參數,即要發佈的數據,即要對其執行操作的對象實例

所以,這兩個調用是相同的:

user.$save(params, success, error);  // <-- non-static method 
User.save(params, user, success, error); // <-- static method 

更新2

只有在它是爲時已晚,我發現了方法的參數都在文檔中很清楚地描述:

對類對象或實例對象的操作方法噸可以用下面的參數來調用:

  • HTTP GET 「類」 動作:Resource.action([parameters], [success], [error])
  • 非GET 「類」 動作:Resource.action([parameters], postData, [success], [error])
  • 非GET實例操作:instance.$action([parameters], [success], [error])

調用成功回調(valueresponseHeaders)參數。
使用(httpResponse)參數調用錯誤回調。

類操作返回空實例(具有下面的其他屬性)。
實例操作返回操作的承諾。

+0

謝謝。但我不明白爲什麼我的代碼工作?:Thing.save({id:$ scope.thing._id},$ scope.thing,function(){/ *成功回調* /});第三名成功回調。在第二個plase是我想保存的對象(發送到'服務器')。 – pofigizm

+0

我更新了我的答案(兩次),並提供了更詳細的解釋。事實證明,這是所有文件(所以沒有必要深入源代碼首先:) :) – gkalpak

+0

謝謝。我真笨。需要仔細閱讀。 – pofigizm

相關問題