Blazor conditional if statement สำหรับ onclick

Sep 04 2020

ฉันมีช่วงที่ควรมีแอตทริบิวต์ onclick หากบูล IsActive เป็นจริง มิฉะนั้นช่วงไม่ควรมีแอตทริบิวต์ onclick

เช่น

@if (IsActive == true)
{
    <span @onclick="@(e => Go.DoSomething("please"))">
        @s.DisplayText
    </span>
}
else
{
    <span>
        @s.DisplayText
     </span>
}

ไม่มีวิธีหลีกเลี่ยงรหัสซ้ำโดยใช้ตัวดำเนินการที่เกี่ยวข้องหรือไม่? เช่น

@(IsActive == true ? "add onclick method somehow?" : "")

คำตอบ

4 GaryChan Sep 05 2020 at 13:13

คุณสามารถทำสิ่งต่อไปนี้

<span @onclick="@(e => { if (IsActive) Go.DoSomething("please");})">
    @s
</span>

Lambda Expressionคือสิ่งที่ผมคิดว่าคุณกำลังมองหาจริงๆ

9 Umair Sep 04 2020 at 17:02

วิธีที่ดีกว่าในการเพิ่มเงื่อนไขIsActive == trueอยู่ในGo.DoSomethingวิธีการ แต่ตามหลักการแล้วฉันจะใช้ปุ่มถ้ามันสามารถคลิกได้เพราะเราสามารถเพิ่มdisabledแอตทริบิวต์ให้กับปุ่มได้ในกรณีของคุณคุณสามารถเพิ่มเงื่อนไขภายในonclickวิธีการได้

เพียงแค่เคล็ดลับสำหรับปุ่มคุณสามารถเพิ่มคุณสมบัติบูลีน c # ของคุณภายในแอตทริบิวต์ดังกล่าวได้ดังนี้:

<button disabled="@IsActive">Save</button>
2 devbf Sep 04 2020 at 18:36

แค่ต้องการเพิ่มบางอย่างสำหรับผู้ที่มีปัญหาคล้ายกัน:

หากคุณมีโค้ด HTML มากกว่าช่วงเดียวและคุณจะต้องใช้สองครั้งเนื่องจากคำสั่ง if-else ฉันจะสร้างส่วนประกอบ Blazor ของตัวเอง (เช่น MyComponent.razor) และใช้พารามิเตอร์ส่วนประกอบ วิธีนี้จะทำให้คุณไม่มีรหัสซ้ำกันมากใน if-else-statement