elm - 防止代码的 javascript 部分中的 anchor 标记刷新 Elm 单页面应用程序中的页面?

标签 elm

我正在尝试在单页应用程序中实现无哈希网址(例如 /somePage)。

我现在使用 here 中的 onPreventDefaultClick ,以防止 anchor 链接在单击我的 elm 代码部分时刷新页面。

问题是,我的页面上嵌入了一个 JavaScript 编辑器。并且那里还会有数量不可预测的链接(链接到应用程序上具有不同网址的不同功能)。我如何防止他们刷新页面。但也允许他们运行命令并随后更改 url。

使用像 /#/somePage 这样的哈希 URL 就很容易实现。在当前的实现中,我只是在代码的 JS/编辑器部分的 anchor 标记中添加了哈希 url,这只需更改触发我的 PageChanged Page 消息的 url 即可。为此,我使用 navigation package在榆树中。

谢谢!

最佳答案

修补编辑器以更改其生成的链接的行为。例如让编辑器添加一个 click 处理程序,通过端口将事件 URL 发送到 Elm 并返回 false (取消事件)。

下面是一个最小的示例来说明这一点:

Main.elm

port module Main exposing (..)

import Html exposing (..)


main =
    program
        { init = ( "", Cmd.none )
        , update = \msg _ -> (msg, Cmd.none )
        , view = view
        , subscriptions = \_ -> navigateTo identity
        }


view m =
    text <| "received: " ++ m


port navigateTo : (String -> msg) -> Sub msg

和一个index.html

<html>
<head>
  <style>
    html {
      background: #F7F7F7;
      color: red;
    }
  </style>
</head>
<body>
  <div> <a href="/first/link" onclick="return sendToElm(this);">First Link</a></div>
  <div> <a href="/second/link" onclick="return sendToElm(this);">Second Link</a></div>
  <script>
    var app = Elm.Main.fullscreen();
    sendToElm = function (el){
      app.ports.navigateTo.send(el.href);
      return false;
    }
  </script>
</body>
</html>

Ellie link

关于elm - 防止代码的 javascript 部分中的 anchor 标记刷新 Elm 单页面应用程序中的页面?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43828575/

相关文章:

record - 如何在 Elm 中创建 Maybe 记录而不是 Maybes 记录

json - Elm:如何使用单个 TypeConstructor 对联合类型进行 Json 解码?

haskell - 是否可以使用 Ghcjs、Haste、Elm 等在服务器端渲染 Haskell 前端?

elm - 带有和不带有 (..) 的 Elm 中的模块导入

node.js - 在 Centos 6.9 上安装 Elm

elm - 获取 Maybe 而不是数组的值

elm - Elm 中解码超过 8 个字段的对象

Elm make on save, hot reload

html-select - 如何在 Elm 中获取多选的选定选项?

parsing - 如何让字符串解析器终止