1

基本的なアプリケーションを作成するために、angularjs を mongolab と組み合わせて使用​​しています。

これが私のコードです

問題は、日付を更新しようとしたことです(「エディター」をクリックしたとき)が、フォームを送信すると、次のエラーが発生しました:

TypeError: Object #<Resource> has no method 'update'

update メソッドが定義されているので、エラーがわかりません。

4

1 に答える 1

2

Project ファクトリを少し変更できます。

コメント後に更新

angular.module('mongolab', ['ngResource']).
    factory('Project', function($resource) {
        var ProjectApi = $resource('https://api.mongolab.com/api/1/databases' +
                '/villes/collections/universities/:id',
                {apiKey: '7pcSaEmpVzZ90V6CVggeHa6Ys71uaZOA'}, {
            update: {method: 'PUT'}
        }
        );

        var Project = function(data) {
            angular.extend(this, data);
        };

        Project.query = ProjectApi.query;
        Project.get = ProjectApi.get;

        Project.prototype.update = function(cb) {
          return ProjectApi.update({id: this._id.$oid},
                angular.extend(this, {_id: undefined}), cb);
        };
        Project.prototype.destroy = function(cb) {
          return ProjectApi.remove({id: this._id.$oid}, cb);
        };
        return Project;

    });

あなたはEditCtrl奇妙なことをします:

function EditCtrl($scope, $location, $routeParams, Project) {
   var self = this;
   // Project is already defined in arguments and it is a service 
   var Project = Project.instance();
}

を呼び出すProject.instance()と、update() メソッドを持たないプレーンなリソース オブジェクトが返されます。Project factory のコードを見てください。

EditCtrl のコードも変更します。

function EditCtrl($scope, $location, $routeParams, Project) {
        var self = this;
        Project.get({id: $routeParams.projetId}, function(projet) {
            self.original = projet;
            $scope.projet = new Project(self.original);
        });

        $scope.save = function() {
            $scope.projet.update(function() {
                $location.path('/list');
            });
        };
    }

そして最後に、それが機能するようになります。

プランカーを見る

于 2013-10-29T05:48:29.303 に答える