Это вызвано тем, что Elm подключает onclick
прослушиватели событий ко всем элементам a
, чтобы иметь возможность перехватывать и обрабатывать маршрутизацию внутри.Он анализирует URL-адрес и классифицирует его как Internal
или External
, где пустой или пропущенный href
, по-видимому, считается External
.Затем Elm создаст Msg, используя конструктор типа, переданный в Browser.application
через onUrlRequest', run
update passing this
Msg`, и здесь мы можем перехватить и обработать его соответствующим образом.
Решение состоит в том, чтобыдобавьте еще один шаблон к update
, который соответствует пустому внешнему URL, где мы просто ничего не делаем вместо попытки load
URL, как мы обычно делаем с другими внешними URL.Что касается примера вопроса, следующая обновленная функция update
должна помочь:
update msg model =
case msg of
UrlRequested (Browser.Internal _) ->
( model, Cmd.none )
UrlRequested (Browser.External "") ->
( model, Cmd.none )
UrlRequested (Browser.External url) ->
( model, Browser.Navigation.load url )
UrlChanged _ ->
( model, Cmd.none )