معني - angularjs شرح



تعيين نموذج إلى البكر دون مسح البيانات (4)

في هذه اللحظة يمكنني أن أقترح حلين ممكنين. أول واحد هو قريب حقا مما كنت قد اقترح، كما طريقة reset النموذج لديه التوقيع التالي وقبول قيمة النموذج كوسيلة الأولى:

//@angular/forms/src/model.d.ts:
reset(value?: any, {onlySelf}?: { onlySelf?: boolean; }): void;

في معالج التقديم، سوف نلتقط نسخة من آخر حالة:

const { myForm: { value: formValueSnap } } = this;

والقيام إعادة تعيين نفسها:

this.myForm.reset(formValueSnap, false);

وهناك خيار آخر من الأوقات، عندما لم يكن هناك إمكانية لإعادة النموذج، هو خلق طريقة المساعد، والتي سوف تميز كل عنصر تحكم كما pristine وسوف تبقي البيانات. ويمكن أن يسمى في نفس مساعد تقديم بدلا من إعادة تعيين.

private _markFormPristine(form: FormGroup | NgForm): void {
    Object.keys(form.controls).forEach(control => {
        form.controls[control].markAsPristine();
    });
}

رابط إلى بلونكر المحدثة.

https://code.i-harness.com

لدي نموذج يعرض قائمة بالعناصر <input type="text"> . كلهم يشتركون في زر حفظ مشترك يتم تعطيله حتى يصبح النموذج متسخا. بعد ذلك، بمجرد أن ينقر المستخدم على زر الحفظ، سيتم إرسال البيانات إلى الخادم. إذا كان الخادم حفظ البيانات بنجاح، أريد إعادة تعيين النموذج إلى حالة البكر، ولكن أريد للحفاظ على كافة البيانات في النموذج بحيث يمكن للمستخدم تحرير البيانات أبعد إذا اختاروا ذلك.

بعد البحث، لقد وجدت الأسلوب NgForm.reset() . في حين أن هذا لا يحدد الشكل إلى البكر، فإنه للأسف أيضا مسح النموذج. يبدو أن طريقة إعادة تعيين لها قيمة المعلمة، ولكن لا أستطيع أن يبدو لمعرفة ما يفعله. ومع ذلك، لا أريد إزالة البيانات.

لقد حاولت أيضا myForm.pristine = true كذلك، ولكن هذا يسبب إعادة تحميل الصفحة لسبب ما.

هنا هو بلونكر مما يدل على المشكلة .


إذا كنت يحدث أن تستخدم نماذج يحركها قالب وكان لديك شيء من هذا القبيل في المكون الخاص بك: @ViewChild('myForm') myform: any;

لقد وجدت أن markAsPristine() وظيفة على الخاصية نموذج النموذج الخاص بك. لذلك سيكون هذا this.myform.form.markAsPristine() .

اعتقد فقط أن أضيف هذا في حالة الآخرين عبر markAsPristine() كما لم يتم تعريفها.


أعتقد أنني حلت هذا على طريقتي:

form.controls['contato'].reset();


ما تبحث عنه هو myForm.markAsPristine() .