1

皆さん、私は AngularJS と angular-resource を使用して、非常に単純な REST API 呼び出しを実行しています。メッセージを一覧表示 (および作成) するページの JavaScript コードを次に示します。

(function() {
'use strict';
var messagesApp = angular.module('messagesApp', ['ngResource']);

messagesApp.factory('Message', function($resource) {
    return $resource('/api/messages/:id', {id: '@id'}, {
        query: {method:'GET', isArray:true} });
});

messagesApp.controller('MessagesCtrl',
  function($scope, Message) {
    $scope.messages = Message.query();

    $scope.addMessage = function() {
        $.Dialog({
            'title': 'Add new Message',
            'content': '<p>Enter the <strong>unique</strong> name of the new message.</p><input type="text" id="newMessageName"/><p>Enter the <strong>unique</strong> ID for this message.</p><input type="text" id="newID"/>',
            'draggable': false,
            'overlay': true,
            'closeButton': true,
            'buttonsAlign': 'right',
            'buttons': {
                'save': {
                    'action' : function() {
                        var newMessage = new Message();
                        newMessage.name = $('#newMessageName').val()
                        newMessage.altid= parseInt($('#newID').val())
                        newMessage.longDescription = "This is a new message";
                        newMessage.$save();
                        console.log(newMessage.id)
                    }
                }
            }
        });
    }
  }
);
})();

何が起こるかというと、コンソール ログ メッセージに「未定義」が出力されます。ネットワーク ログを見ると、REST API が実際に新しく作成されたオブジェクトを返していることがわかります。結果の型として Ok を使用するのではなく、別のものを使用する必要がありますか? 不足している HTTP ヘッダーはありますか .. または $save を間違って使用していますか??

$.Dialog() メソッドは、私が使用している別の JavaScript ライブラリ (metroui.og.ua) からのものであり、それがこれに干渉しているかどうかはわかりません..

4

1 に答える 1

6

newMessage.$save()は非同期なので、応答データを取得したい場合は、成功のコールバック関数で行う必要があります。

newMessage.$save(function(msg, headers){
  console.log(newMessage.id); // note, at this point msg === newMessage
});

ドキュメントを見る

于 2013-05-31T21:54:29.220 に答える