无法从服务器传递返回的对象

时间:2014-02-08 17:04:29

标签: javascript angularjs promise

我正在接受一个由同行启动的项目,并且遇到API调用问题。 这是我的角度控制器:

angular.module('oowli').factory('Note', ['$http', function($http) {
  var Note = function(data) {
    angular.extend(this, data);
  };

  Note.prototype.save = function() {
    var note = this;
    return $http.post('/notes', this).then(function(response) {
      note = response.data;
    }, function(error) {
      return error;
    });
  };

  return Note;
}]);

并且在此函数中执行调用:

var saveNote = function(Note, scope){
        return function(span, phrase){
            var noteObj = new Note({
                user: scope.global.user._id,
                content: span.innerText
            });
            noteObj.save().then(function(){
                console.log(noteObj);
            });

        };
    };

问题是,在保存笔记之后,noteObj是原始文件,而不是从服务器返回的文件(带有_id字段)。 在Note.prototype.save上调试,response.data附带_id;

我需要知道如何在saveNote函数中访问返回的Note对象。

1 个答案:

答案 0 :(得分:1)

您正在将新对象分配给Note.prototype.save函数中的局部变量'note',但之后不会对其执行任何操作。

最快的解决方案是将返回对象的属性复制到笔记而不是分配给它,因此不是:

note = response.data;

这可能有效:

angular.copy(response.data, note)

总的来说,虽然我不喜欢让Note类负责保存自己的方法。我会创建一个保存对象的笔记服务。