私は次のような非常に単純なリソースを持っています:
angular.module('ExampleServices', ['ngResource']).
factory('NoteService', function($q, $rootScope, $resource){
var baseurl = "/api/v1/note/";
var Note = $resource(baseurl, {}, {
// get notes method
get_for_model: {
method: 'GET',
params:{user: '', object_id: ''},
isArray: false
},
// leave note method
leave_note: {
method: 'POST',
}
});
return Note
}
);
そして、コントローラー内でleave_note
次のようにメソッドを呼び出します。
$scope.note = function(){
$scope.note = NoteService.leave_note({
desc: desc,
title: title,
object_id: oid,
});
}
これは基本的に、アプリケーションのREST APIに対してPOSTメソッドを呼び出し、オブジェクトが作成されます。ページが更新されると、にリストされているメモが表示されますnotes
。しかし、私の知識$resource
に関しては、それ自体でビューを更新する必要があります。
ドキュメントからの引用
$ resourceオブジェクトメソッドを呼び出すと、すぐに空の参照(isArrayに応じてオブジェクトまたは配列)が返されることを理解することが重要です。サーバーからデータが返されると、既存の参照に実際のデータが入力されます。
関数として定義するまで$rootScope.$apply
、メソッド内で使用することはできません(次のように:)leave_note
leave_note: function(){
var note = New Note();
note.desc = desc;
note.title = title;
note.object_id = oid;
note.$save();
$rootScope.$apply();
}
ただし、上記の場合、RESTAPIに送信する呼び出しにはundefined
リクエストメソッドがあります。
私が考えることができるもう1つの問題は、$scope.note
定義していないが$scope.notes
、RESTAPIによって送信されるメモのリストであるということです。$scope.note
更新されている可能性がありますが、オブジェクトをレンダリングしていないので、note
テンプレートをnotes
使用してレンダリングしているため、テンプレートの変更を確認できません。ng-repeat
また、新しいメモが保存されたら、notesオブジェクトを再フェッチしようとしましたが、基本的にすべてのメモが削除され、見苦しい(ほとんどページの更新のように)すべてのメモが再レンダリングされます。
私が達成しようとしているのは、note
オブジェクトが保存されるとすぐに、新しいメモを既存のメモにマージすることです。案内してください。ありがとう