الطريقة المناسبة لخدمة خدمة الموارد الزاوية للمستخدم

StackOverflow https://stackoverflow.com/questions/19839239

سؤال

أنا أعمل مع موارد Angular في محاولة لاستخدام وظيفة حفظ $ الزاوي.

بشكل افتراضي $ Save ، يرسل النموذج إلى عنوان URL للخدمة. ومع ذلك ، يبدو أنه يتوقع إرجاع النموذج إلى الخدمة (نموذجي فارغ إذا لم أفعل ذلك). كنت أتساءل ما هي أفضل طريقة لإرجاع الرسائل والأخطاء إلى وحدة التحكم.

كان الحل الخاص بي هو إنشاء فصل جديد في PHP الخاص بي يحتوي على صفيف أخطاء يخزن أي أخطاء واجهتها في المعالجة وحقل يخزن النموذج للعودة. ثم يتم إرسالها مرة أخرى ومعالجتها في وظيفة استدعاء:

$scope.ApplyChanges=function(){
   console.log("saving...");
    $scope.user.$save(function(data){
      console.log(data);
      if (data.errors.length>0){
         for (error in data.errors){
            $scope.alerts.push({type:'danger', msg: data.errors[error].msg});
         }
         $scope.user=User.get({id:data.data.UserName});
      } else {
         $scope.user=User.get({id:data.data.UserName});
         $scope.alerts.push({type:'success', msg: "User data saved successfully"});
      }
    }, function(err){
         $scope.alerts.push({type:'danger', msg: "There was a problem saving your data: " + err});
    });

هذه الخطوط هنا: $scope.user=User.get({id:data.data.UserName}); اضطررت إلى استخدامه لأنني إذا قمت للتو بتعيين بلدي $scope.user إلى data.data, ، لم يعد المستخدم يستخدم الخدمة وسأحصل على خطأ عندما حاولت ذلك ApplyChanges تكرارا.

إذن ، هل هناك طريقة للقيام بذلك بشكل أكثر وضوحًا؟ بما أنه يتعين علي إجراء مكالمة إضافية للحصول على النموذج. هل يجب أن أرسل خطأً فقط إذا كان هناك خطأ ثم يكون لديك رد اتصال إضافي للحصول على النموذج؟ هل هناك طريقة أفضل؟

هل كانت مفيدة؟

المحلول

بادئ ذي بدء ، يجب على الخادم الخاص بك إرجاع الأخطاء مع ذات الصلة رموز حالة خطأ HTTP (انظر رموز 4xx و 5xx). وبهذه الطريقة ، لا تتعامل إلا مع الأخطاء في رد اتصال الخطأ:

function onError (response){
    switch (response.status) {
    case 400:
    case 404:
    //etc... 
        response.data.errors.forEach(function(error){
            $scope.alerts.push({type:'danger', msg: error.msg});
        });
        break;
    case 500:
        $scope.alerts.push({type:'danger', msg: "There was a problem saving your data: " + response.data});
        break;
    }
}

ومع ذلك ، إذا كان $ scope.user هو مثيل الموارد $, ، ثم ليس عليك الحصول عليها مرة أخرى من الخادم ، لن تغير طريقة $ Save () الكائن.

لنسخ القيم من كائن "المستخدم" الذي تم استرداده من الخادم إلى $ scope.user استخدم فقط Angular.Extend ()

angular.extend($scope.user, data) //this updates $scope.user with data attributes.

يجدر الإشارة إلى ذلك angular.extend لا يؤدي نسخة عميقة ، إذا لزم الأمر ، استخدم jQuery.Extend:

jQuery.extend(true, $scope.user, data)
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top