हैश टैग का उपयोग
वैसे आप मुझे से बाहर एक व्यंग्य मिला है।
मेरे पास यह Helpers.elm
फ़ाइल में है जो मैं Html.Events.click
के बदले उपयोग कर सकता हूं।
{-| Useful for overriding the default `<a>` behavior which
causes a refresh, but can be used anywhere
-}
overrideClick : a -> Attribute a
overrideClick =
Decode.succeed
>> onWithOptions "click"
{ stopPropagation = False
, preventDefault = True
}
तो एक a [ overrideClick (NavigateTo "/route"), href "/route" ] [ text "link" ]
पर जो की अनुमति होगी मध्यम पर क्लिक तत्व के साथ-साथ नेविगेशन अद्यतन करने के लिए धक्का राज्य का उपयोग।
आपको जो चाहिए वह जावास्क्रिप्ट पर समान है जो pushState के साथ काम करता है, और आप मध्य-क्लिक अनुभव को बर्बाद नहीं करना चाहते हैं। ब्राउज़र को नेविगेट करने से रोकने के लिए, और लक्ष्य के href के माध्यम से नए राज्य में धक्का देने के लिए आप सभी <a>
s, preventDefault
को हाइजैक कर सकते हैं। आप इवेंट हैंडलर में नेविगेशन के <a>
एस को प्रतिनिधि दे सकते हैं। चूंकि Navigation
रनटाइम इतिहास परिवर्तनों को बाहरी रूप से सुनने में सहायता नहीं करता है (बल्कि यह एक प्रभाव प्रबंधक का उपयोग प्रतीत होता है), आपको पोर्ट को पोर्ट के माध्यम से धक्का देना होगा - सौभाग्य से यदि आप Navigation
पैकेज का उपयोग कर रहे हैं, तो आपको पहले से ही टुकड़े हैं।
एल्म अंत में, का उपयोग Navigation
programs में से किसी एक के साथ संयोजन में करें। उसी संदेश का उपयोग करने के लिए सदस्यता लेने के लिए एक पोर्ट बनाएं जिसका उपयोग इसके आंतरिक यूआरएल परिवर्तनों के लिए किया जाता है।
const hijackNavClick = (event) => {
// polyfill `matches` if needed
if (event.target.matches("a[href]")) {
// prevent the browser navigation
event.preventDefault()
// push the new url
window.history.pushState({}, "", event.target.href)
// send the new location into the Elm runtime via port
// assuming `app` is the name of `Elm.Main.embed` or
// whatever
app.ports.externalPush.send(window.location)
}
}
// your nav selector here
const nav = document.querySelector("nav")
nav.addEventListener("click", hijackNavClick, false)
मुझे लगता है कि यह preventDefault करने के लिए अपने लंगर लिंक ऐसे ईवेंट श्रोता संलग्न करने के लिए और एल्म –
करने के लिए एक बंदरगाह के माध्यम से आशय पारित करने के लिए संभव हो सकता है @SimonH:
के बाद पृष्ठ लोड, इस का उपयोग ऐसा लगता है, और मैं उस विकल्प के बारे में सोच रहा हूं। यदि संभव हो तो मैं एल्म में रहने के बारे में देखना चाहता हूं। – scoots