2

Node.js/Mongodb アプリケーションに支えられた Angular アプリを構築しています。

idFor each リソースは、リソースの作成時に Mongodb によって生成されます。

POSTファクトリからサーバーに新しいオブジェクトを渡すと、サーバーは新しいリソースの URI に設定されたロケーション ヘッダーを含む応答コードを返します201。応答を処理してから、レコードを正しいもので更新するにはどうすればよいidですか?

angular.module('myApp.Todoservices',['ngResource']).
factory('Todo',function($resource){
    return $resource('http://localhost\\:3000/todos/:id', {id:'@_id'}, {
        getAll: {method:'GET', isArray:true},
        update : {method:'PUT'},
        create : {method:'POST'},
        delete : {method:'DELETE'}
    });
});
4

5 に答える 5

1

前述のように、これは ではサポートされ$resourceていません。その理由はわかりません。ただし、ここに私の回避策があります。

var tmpPart = new MyResource({name: $scope.item.name});
tmpPart.$create(function(_tmpPart, responseHeaders){
    $resource(responseHeaders("Location")).get(function(tempResourceObject){
        $scope.myResourceObjects.push(new MyResource(tempResourceObject))
    });
});

リソースオブジェクトの新しいインスタンスはどこnew MyResource(tempResourceObject)にあり、それを使って好きなことをすることができます。

于 2015-03-21T20:38:31.953 に答える
1

デフォルトの $resource サービスをカスタム サービスでオーバーライドできます。 coffeescript と ng-classify で申し訳ありません

class Resource extends Factory
  constructor: ($resource, $http) ->
    return class ResourceFactory extends $resource
      constructor: (url, paramDefaults, actions, options)->
        class Res extends super
          $save: (params, success, error)=>
            super(
              params
            , (response, responseHeaders)=>
              if location = responseHeaders("Location")
                $http
                .get(location)
                .then (httpResponse)->
                  success new Res httpResponse.data, responseHeaders
                , error
              else
                success response, responseHeaders
            , error
            )

        return Res

その後

Users = Resource '/users'
user = new Users name:'foo'
user.$save (savedUser)->
  savedUser # will be created from data loaded from location header of post response
于 2015-08-13T19:24:50.690 に答える
0

$resource サービスは、基礎となる $http サービスの高レベルのラッパーです。

post()$resource メソッド ( 、put()、 、...)の成功およびエラー コールバックは、メソッドget()を含む応答オブジェクトを受け取りますheaders()

このメソッドを使用すると、すべての応答ヘッダーの配列を取得するか、特定のヘッダー名をパラメーターとして指定した場合は特定のヘッダー値を取得できます。

var successCallback = function(response){
  var location = response.headers('location');
  // extract resource ID form the location header here...
}

$scope.todo.post(data, successCallback);

$http ヘッダー getter 関数は$http docsで説明されています

于 2013-06-22T21:11:40.073 に答える
0

私は "angular-resource": "1.3.11" を使用していますが、非常にシンプルに見えます。Angular リソースのドキュメントによると:

クラス オブジェクトまたはインスタンス オブジェクトのアクション メソッドは、次のパラメーターを使用して呼び出すことができます。

HTTP GET「クラス」アクション: Resource.action([パラメータ], [成功], [エラー])

GET 以外の「クラス」アクション: Resource.action([parameters], postData, [success], [error])

GET 以外のインスタンス アクション: instance.$action([parameters], [success], [error])

成功のコールバックは (value, responseHeaders) 引数で呼び出されます。

エラー コールバックは (httpResponse) 引数で呼び出されます。

 todo.save(postData,
       function (value, responseHeaders) {
           $scope.id = responseHeaders('Location').split('/').pop();
       }
);
于 2015-05-25T17:08:47.947 に答える
0

$resource (まだ) は [1] をサポートしていないようですので、今のところ $http [2] サービスを使用してください。

[1] https://github.com/angular/angular.js/issues/7037

[2] http://docs.angularjs.org/api/ng/service/ $http

于 2014-04-08T02:29:46.340 に答える