angular - الملكية ملزمة مقابل السمة إنتيربولاتيون




binding properties (3)

الملكية ملزمة مثل

[trueValue]="..."

يقيم التعبير "..." ويعين القيمة

"true" يقيم إلى القيمة true "Y" غير معروف. لا توجد قيمة Y داخلية في تيبسكريبت ولا خاصية في مثيل فئة المكون، وهو نطاق قالب ملزمة. في هذه الحالة كنت تريد

[trueValue]="'Y'"

لاحظ علامات الاقتباس الإضافية لجعل Y سلسلة.

يتم تعيين سمات بسيطة أيضا إلى المدخلات

trueValue="Y"

هو هتمل عادي دون أي Angular2 ملزمة وقيم السمة هي دائما السلاسل. ولذلك فإن هذا سيعين السلسلة Y

طريقة أخرى هي استيفاء السلسلة

trueValue="{{true}}"

( "true" سلسلة") لأنه سيتم تقييم التعبير الذي يحتوي على {{...}} ثم يتم تحويلها إلى سلسلة قبل تمريرها إلى الإدخال. لا يمكن استخدام هذا لربط قيم أخرى من السلاسل.

لربط صريح سمة بدلا من خاصية يمكنك استخدام (إلى جانب trueValue="Y" الذي يخلق سمة ولكن لا تفعل أي تقييم)

[attr.trueValue]="'Y'"

أو

attr.trueValue="{{'Y'}}"

السمة ملزمة مفيدة إذا كنت ترغب في استخدام السمة trueValue لمعالجة العنصر مع محددات كس.

لقد قرأت مقالا عن الفرق بين الملكية وربط السمات. من ما فهمته، معظم الوقت، أنغلار 2 يفضل الارتباطات الملكية، لأنه بعد كل تغيير في البيانات، سيتم تحديث دوم. (إذا كنت مخطئا، يرجى تصحيح لي).

لدي عنصر مخصص واستخدامه من المكون الأصل. في ذلك، لدي @Input اسمه truevalue . عندما أبدأ truevalue من الوالد عن طريق الملكية ملزمة، في بعض الأحيان، فإنه لا يتغير. لقد استخدمت الرمز التالي:

<my-checkbox [(ngModel)]="chkItems" [disabled]="!editMode" [trueValue]="Y"></my-checkbox>

إذا قمت بإرسال true أو "1" في trueValue أنه يعمل، ولكن إذا أرسلت "Y" أو "YES" ، فإنه لا يعمل. لذلك أنا مجبر على استخدام السمة ملزمة. أنا لا أعرف ما هي المشكلة.

لقد غيرته، إلى ما يلي:

<my-checkbox [(ngModel)]="chkItems" [disabled]="!editMode" trueValue="Y"></my-checkbox>

شكرا مقدما


بافتراض my-checkbox الخاص بي هو محدد المكون المخصص وكنت تستخدمه في المكون الأصلي. كما لديك trueValue @Input على المكون المخصص الخاص بك، من أجل استخدامه في المكون الأصل Y يجب تقييم لبعض value التي تقوم به في حالة 1 (أي ما يعادل صحيح).

لربط الملكية للعمل، يجب تقييم إلى قيمة. "يس" أو "Y" هي قيمة سلسلة فقط والتي لن يتم تقييمها إلا إذا كنت تفعل شيئا مثل:

export class ParentComponent` {
       Y = "YES"; // <--or "Y"
    }

ثم عرض trueValue باستخدام interpolation في مكون مخصص مثل {{trueValue}}

هناك شيء آخر يجب أن .toString() عند استخدام {{}} أي الاستيفاء الذي يقوم دائما بتحويل القيمة إلى .toString() قبل الربط.


عند تقديم قيم البيانات كسلاسل ، لا يوجد سبب تقني لتفضيل نموذج إلى آخر.

إذا كنا نريد قيم البيانات كما منطقية أو غيرها من سلسلة ثم يجب أن نذهب لملكية الملكية





interpolation