私はAngularJSアプリケーションに取り組んでいます。私はAngularJSを初めて使用しています...
すべてが正常に機能します (データの読み込み、既存のレコードの変更の保存、削除)。問題は、REST サービスから返された JSON データでクライアント側モデルを更新することです。サーバー側のコードが正しく実行され、DB の変更が適用されます。
例: 次の方法でクライアント側モデルに新しいレコードを挿入します。
$scope.addnewpage = function ($event){
var newItem = new Page();
newItem.id = '-1'; // Indicates to the REST that it's an INSERT!
newItem.page_name = 'New Page';
newItem.page_title_en = 'New Page';
newItem.page_title_hu = 'Új oldal';
newItem.mnu_title_hu = 'Nem Page';
newItem.mnu_title_en = 'Új oldal';
newItem.page_text_en = '...';
newItem.page_text_hu = '...';
newItem.page_footer_en = '...';
newItem.page_footer_hu = '...';
newItem.weight = '1';
var idx = $scope.pages.push(newItem)-1;
$scope.pages[idx].active = true;
}
サーバー側には、ID フィールドに -1 (INSERT new) が含まれているか、0 より大きい整数 (UPDATE が存在する) が含まれているかを区別する PHP REST サービスがあります。
REST が NEW id とその他の調整されたフィールドを含む新しいレコードを正しい JSON 形式でクライアントに返す場合、AngularJS はそれを理解せず、ブラウザ コンソールに上記のエラー メッセージを送信します。
"TypeError: Object #<Resource> has no method 'push'"
私のサービスは次のようになります (isArray 属性を true/false に変更してみました - 同じエラー):
AdminModule.factory('Page', function($resource) {
return $resource(
'../admin/itcrest.php/page/:id',
{id : '@id'},
{
'get': {method:'GET', isArray:false},
'query': {method:'GET', isArray:true},
'save': {method:'POST', isArray:true},
'delete': {method:'PUT', isArray:true}
}
);
});
保存を行うコントローラーのコード スニペットは次のとおりです。
AdminModule.controller('PagesListController',
function ($scope, $http, $timeout, Page, $location, MessageBus, $modal) {
// ...
$scope.savepage = function (item, $event){
item.$save(item, function(responseData) {},
function(error) { });
}
// ...
}
ページ全体をリロードせずに新しいレコードの挿入を管理し、サーバーからの実際のデータでクライアントを更新する方法を教えてください。私が本当にやりたいことは、REST サービスから実際のデータを返し、新しいデータでクライアント モデル レコードを更新することです。UPDATE と INSERT の両方の場合です。空の JSON 以外を返すと、エラーが送信されます。
サーバー側のコードはうまく機能し、正しいデータを返すので、問題はクライアント側にあるに違いないと思います。
ありがとうございました。