基本的なアプリケーションを作成するために、angularjs を mongolab と組み合わせて使用しています。
問題は、日付を更新しようとしたことです(「エディター」をクリックしたとき)が、フォームを送信すると、次のエラーが発生しました:
TypeError: Object #<Resource> has no method 'update'
update メソッドが定義されているので、エラーがわかりません。
基本的なアプリケーションを作成するために、angularjs を mongolab と組み合わせて使用しています。
問題は、日付を更新しようとしたことです(「エディター」をクリックしたとき)が、フォームを送信すると、次のエラーが発生しました:
TypeError: Object #<Resource> has no method 'update'
update メソッドが定義されているので、エラーがわかりません。
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');
});
};
}
そして最後に、それが機能するようになります。
プランカーを見る