मेरे पास निम्नानुसार Earth नामक एक चाइल्ड कंपोनेंट है।

<h3>Earth's speed is @Speed unit.</h3>

@code {
    [Parameter] public double Speed { get; set; }
    [Parameter] public EventCallback<double> SpeedChanged { get; set; }
}

God नामक एक मूल घटक निम्नानुसार Earth का उपभोग करता है।

@page "/God"

<Earth @bind-Speed="speed" SpeedChanged="Job" />

<button @onclick="@(()=>speed=0)">Stop Spinning!</button>

@code {
    private double speed = 100.0;
    private void Job(double s)
    {
        Console.WriteLine($"Earth's speed: {s}");
    }
}

यहां मैं Earth घटक के SpeedChanged के माध्यम से सदस्यता लेने का प्रयास कर रहा हूं

<Earth @bind-Speed="speed" SpeedChanged="Job" />

दुर्भाग्यवश, मुझे विजुअल स्टूडियो पर निम्न त्रुटियां मिलीं:

घटक पैरामीटर SpeedChanged का उपयोग दो या अधिक बार किया जाता है यह घटक। पैरामीटर अद्वितीय (केस-संवेदी) होने चाहिए। ...

इस मुद्दे को कैसे ठीक करें? किसी भी विचार का स्वागत है!

संपादित करें

एमएस प्रलेखन से, मैं समझ गया कि

<Earth @bind-Speed="speed" />

के बराबर है

<Earth @bind-Speed="speed" @bind-Speed:event="SpeedChanged" />
0
I Eat Pork Every Single Day 21 जुलाई 2020, 04:05

1 उत्तर

सबसे बढ़िया उत्तर

जब आप घटक डेटा-बाइंडिंग को लागू करते हैं, तो आपको दो पैरामीटर गुणों को परिभाषित करना चाहिए, जैसा कि आप वास्तव में करते हैं:

[Parameter] public double Speed { get; set; }
[Parameter] public EventCallback<double> SpeedChanged { get; set; }

इस चाइल्ड कंपोनेंट को पैरेंट कंपोनेंट की प्रॉपर्टी से बाइंड करने के लिए, आप निम्न कार्य करते हैं:

<Earth @bind-Speed="speed"/>

यह माता-पिता और बच्चे के घटकों के बीच दो-तरफ़ा डेटा-बाध्यकारी बनाता है।

नोट: आप SpeedChanged गुण के लिए कोई मान प्रदान नहीं करते हैं। यह निहित है, यही कारण है कि जब आप ऐसा करने का प्रयास करते हैं तो आपको एक त्रुटि मिलती है, क्योंकि संकलक इसे स्वयं करने जा रहा है। कंपाइलर इंसर्ट कोड जो बच्चे से माता-पिता के लिए बाइंडिंग करता है।

एमएस प्रलेखन से, मैं समझ गया कि

<Earth @bind-Speed="speed" />

के बराबर है

<Earth @bind-Speed="speed" @bind-Speed:event="SpeedChanged" />

यह सच है, लेकिन आप कुछ और कर रहे थे... जैसा कि मैंने कहा है कि कंपाइलर स्पीड चेंज को जोड़ने जा रहा था... अब, यदि आप इसे मैन्युअल रूप से जोड़ने का प्रयास करते हैं, तो ऐसा लगता है जैसे आप इसे दो बार उपयोग कर रहे थे... अनुमति नहीं हैं।

जब आप इनपुट तत्व और इस तरह की संपत्ति के बीच दो-तरफा डेटा-बाध्यकारी बनाते हैं:

<input type="text" @bind="MyProperty"/>

संकलक, पर्दे के पीछे बाध्यकारी बनाता है जैसे कि आपने लिखा था:

<input type="text" value="MyProperty" @onchange="@((args)=>MyProperty=args.Value.ToString())"/>

अब, यदि आपने <input type="text" @bind="MyProperty" @onchange="....."/> जैसा कुछ लिखा है, तो संकलक चिल्लाना शुरू कर देगा कि विनिमय पहले से ही उपयोग किया जा चुका है। वही बात जो आपके कोड के साथ होती है।

1
enet 21 जुलाई 2020, 09:56