سؤال

عند استدعاء $save على ngResource، هل من الممكن POST فقط الحقول المحررة بدلاً من نشر النموذج بأكمله في كل مرة؟

var User = $resource('http://example.com/user/123/');

User.get(function(user) {
  user.name="John Smith";
  user.$save();
  // What I *want* -> POST: /user/123/ {name:'John Smith'}
  // What currently happens -> POST: /user/123/ {name:'John Smith', age: 72, location: 'New York', noOfChildren: 5}
});
هل كانت مفيدة؟

المحلول

لا، ليس من الممكن، على الأقل ليس في الحالات، انظر http://docs.angularjs.org/api/ngResource.$resource

...] يمكن استدعاء طرق الإجراء على كائن الفئة أو كائن مثيل مع المعلمات التالية:

  • HTTP يحصل على إجراءات "الفئة": Resource.action([parameters], [success], [error])
  • الإجراءات "الفئة" غير GET: Resource.action([parameters], postData, [success], [error])
  • إجراءات مثيل غير GET: instance.$action([parameters], [success], [error])

لذا، فمن الممكن فقط عن طريق تمرير البيانات لحفظها إلى طريقة الحفظ "الثابت"، أي User.save.شيء من هذا القبيل:

User.get(function(user)
{
    user.name = 'John Smith';
    User.save({name: user.name});
});

من المحتمل أن يعتمد نجاح هذا الأمر بالنسبة لك على ما ستفعله بالملف user مثال.

نصائح أخرى

عندما أريد حفظ حقل واحد فقط، أستخدم الحقل الثابت .save() الطريقة، مع رد اتصال يأخذ الاستجابة من ذلك ويقوم بتحديث الكائن المحلي عند النجاح:

$scope.saveOneField = function(modelInstance) {
  ModelName.save({
    id: modelInstance.id,
    theField: <some value>
  }, function(response) {
    // If you want to update *all* the latest fields:
    angular.copy(response, modelInstance.data);
    // If you want to update just the one:
    modelInstance.theField = response.data.theField;
  });
};

يفترض هذا أنه عند إرسال طلب POST إلى المورد (على سبيل المثال، /modelnames/:id)، يستجيب خادمك بأحدث إصدار محدث من modelInstace.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top