4

私はAngularのメインページをフォローしており、$ resourceを拡張して、次のような更新メソッドを追加しました。

angular.module('user', ['ngResource']).
factory('User', function($resource) {
  var User= $resource('/user/:id', {
    update: {
      method: 'PUT'
    }
  });

  User.prototype.update = function(cb) {
    return User.update({  // this line throws the error
      id: this.id
    }, angular.extend({}, this, {
      _id: undefined
    }), cb);
  };

ただし、実行中:

$scope.user.update()

TypeErrorをスローします:オブジェクト関数h(a){v(a || {}、this)}にはメソッド'update'がありません

私は今私が欠けているものを見ることができません、どんな助けもありがたいです

4

3 に答える 3

9

実際、paramDefaults引数に空のオブジェクトを渡す必要があるという問題が見つかりました:

var User= $resource('/user/:id', {}, {
    update: {
      method: 'PUT'
    }

}
于 2013-01-13T18:20:10.923 に答える
0

リソース インスタンスでは、メソッド名の前に $ が付きます。

$scope.user.$update({}, cb);
于 2013-01-12T17:49:35.757 に答える
0

縮小された angularjs バージョンを使用しているため、配列表記を使用する必要があります。必要なサービスを配列に挿入し、その後に関数を挿入します。

angular.module('user', ['ngResource']).
factory('User', ['$resource', function($resource) {
  var User= $resource('/user/:id', {
    update: {
      method: 'PUT'
    }
  });

  User.prototype.update = function(cb) {
    return User.update({
      id: this.id
    }, angular.extend({}, this, {
      _id: undefined
    }), cb);
  });
}]);

注:同じことがディレクティブ、コントローラーなどにも当てはまります...

于 2013-01-11T21:22:07.803 に答える