【问题标题】:How to read response from angular resource $save() and also keeping original data如何从角度资源 $save() 读取响应并保留原始数据
【发布时间】:2013-09-02 07:05:55
【问题描述】:

我是 Angular 的新手。我确定我在这里遗漏了一些基本的东西。

我有一个对象,我将其发布到服务器以创建它。服务器返回对象 ID,我需要读取和更新客户端中的对象。

服务器只会返回对象 ID,但是,在客户端,我有其他数据在我执行回调时无法使用(我无权访问原始数据)。

The Following jsfiddle code has been added as a reference:

//Get Angular Project module
var app = angular.module("app", ['ngResource']);

//create Project factory
app.factory('Project', function ($resource) {
    return $resource('http://cmsanalyticsdev.pearson.com\\:8081/api/projects/:projectid',
            {projectid:'@id'},
            {update: {method:'PUT', isArray:false}}    
    );

});


//Controller for testing
app.controller('ApplicationController', function ($scope, Project) {

//Project object
var project = new Project({"name":"New Project Test","thumbnail":"","statusid":"521d5b730f3c31e0c3b1e764","projecttypeid":"521f585c092a5b550202e536","teamid":"521f585a092a5b550202e521","authors":[{"firstname":"Dilip","lastname":"Kumar"}],"projectspecificmetadata":{"isbn13":"345345","guid":"asfas"},"modifiedby":"521f585a092a5b550202e525"}
);
//Create new project
project.$save(project, function (projectResponse) {
                        project.projectId = projectResponse._id;
                        alert(project.name);
                    });

});

【问题讨论】:

    标签: angularjs angularjs-resource


    【解决方案1】:

    以下是 $update 的类似方法。

     //keep original data to pass into callback
     var originalProjectObject = angular.copy(project);
     //Call server to update the project data
     project.$update({ projectid: project._id }, function (projectResponse) 
     {
       originalProjectObject._id = projectResponse._id;
       //update scope
       scope.project = originalProjectObject;                        
     },originalProjectObject);
    

    【讨论】:

      【解决方案2】:

      我想你想要这样的东西:

      //Controller for testing
      app.controller('ApplicationController', function ($scope, Project) {
      
              //Project object
              var projectData = {"name":"New Project Test","thumbnail":"","statusid":"521d5b730f3c31e0c3b1e764","projecttypeid":"521f585c092a5b550202e536","teamid":"521f585a092a5b550202e521","authors":[{"firstname":"Dilip","lastname":"Kumar"}],"projectspecificmetadata":{"isbn13":"345345","guid":"asfas"},"modifiedby":"521f585a092a5b550202e525"};
              var project = new Project(projectData);
      
              //Create new project
              project.$save(project, function (projectResponse) {
                                      projectData.projectId = projectResponse.id;
                                      console.log("ProjectData: %j", projectData);
                                  });
      
          });
      

      【讨论】:

      • 不确定我是否完全理解。回调是保存函数的第二个参数。在该回调中,您可以通过“projectResponse”访问服务器的响应。
      • 我想从服务器获取响应并更新我发送到服务器以存储到数据库中的对象....希望得到解释。
      • 所以在回调里面你有 project._id = blah.. 在这里更新客户端对象。在这里您可以访问服务器返回的数据。
      • 服务器正在返回 projectId。一种选择是我可以再次调用服务器以获取给定 projectId 的数据。但是在这种情况下,我没有使用我已经发送到服务器的数据(我在服务器上发布的数据的唯一区别是没有 projectId)
      • 这是一个闭包,因此如果您可以访问周围范围内正在讨论的数据,则可以在回调中访问相同的数据。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-03-01
      • 2018-01-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-04
      相关资源
      最近更新 更多