2

ここ数日、私は REST サービスを呼び出し、応答、エラー、コールバックなどを追跡する作業を行っています。ほとんどの投稿を行いましたが、Angular に関する理解が限られているため、理解できないようです。以下は、私がこれまでに得た問題と理解です。

「project_id」のみを返す Project.$update() サービスを使用しています。このサーバーは完全なデータを再度返しません。以下は、ここで共有する数行のコードです。

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

});

以下は、プロジェクトの更新/作成に使用しているディレクティブのコードです。

//save project
            scope.saveProject = function (project) {
                //update modified by field
                project.modifiedby = scope.user._id;
                //change to view mode
                scope.projectView = 1;
                //call server to save the data                
                if (project._id == undefined || project._id == "") {

                    //Call server to create new and update projectID
                    project._id = project.$save()._id;
                }
                else {
                    //Call server to update the project data
                    project.$update({ projectid: project._id });
                }


            };

以下は、save() と update() の両方に対するサービス応答です。

{"_id":"52223481e4b0c4d1a050c25e"}

ここでの問題は次のとおりです。「project」オブジェクトの値は、project_id のみを持つサーバーから返された新しい応答に置き換えられ、他のフィールドは置き換えられます。

$resource に関する詳細なドキュメントを調べていましたが、把握できません。エラー、レスポンス、コールバックを検出するためのコードを記述するためのガイダンスをここで得られることは素晴らしいことです。

4

2 に答える 2

0

次のように、成功のコールバックでサーバーから返されたオブジェクトで元のオブジェクトを置き換えることができます。

        //save project
        scope.saveProject = function (project) {

            //update modified by field
            project.modifiedby = scope.user._id;

            //change to view mode
            scope.projectView = 1;

            //call server to save the data                
            if (project._id == undefined || project._id == "") {

                //Call server to create new and update projectID
                project.$save(function(updatedProject, headers){

                    // Replace project by project returned by server
                    project = updatedProject;
                });
            }
            else {
                //Call server to update the project data
                project.$update(function(updatedProject, headers){

                    // Replace project by project returned by server
                    project = updatedProject;
                });
            }

        };

これにより、サーバーの応答が受信されるとすぐに、元のオブジェクトがサーバーから返されたオブジェクトに置き換えられます。

$saveメソッドとメソッドのコールバックが同一である場合は、次の$updateようにコードをさらに単純化できます。

        //save project
        scope.saveProject = function (project) {

            //update modified by field
            project.modifiedby = scope.user._id;

            //change to view mode
            scope.projectView = 1;

            var action = (angular.isDefined(project._id)) ? '$update' : '$save';

            //call server to save the data                
            project[action](function(updatedProject, headers){

                // Replace project by project returned by server
                project = updatedProject;
            });

        };

それが役立つことを願っています!

于 2013-09-02T20:55:20.967 に答える