调用AngularJS $ save后没有得到更新的值

时间:2013-05-31 21:27:37

标签: javascript rest angularjs angular-resource

民间,   我正在使用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)
                    }
                }
            }
        });
    }
  }
);
})();

控制台日志消息打印出'undefined'会发生什么。当我查看网络日志时,我发现我的REST API确实在它返回时返回了新创建的对象。我不应该使用Ok作为结果类型而是使用其他东西吗?是否有HTTP标头我错过..或者我使用$ save错误?

$ .Dialog()方法来自我正在使用的另一个JavaScript库(metroui.og.ua),我不知道这是否干扰了这个...

1 个答案:

答案 0 :(得分:6)

newMessage.$save()是异步的,所以如果你想获得响应数据,你应该在成功的回调函数中做到这一点:

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

请参阅the docs