我可以从外部发送 json 数据到 Mithril 路由吗

Can i send json data to Mithril route from outside

例如我有下一条 mitril 路线。

m.route.prefix("#");
m.route(document.getElementById('main'), "/", {
"/": {
 render: function() {
  return m('h1','Hello from root');
 }
},
"/trackingController/:numbers": {
 render: function(data) {
  var data = JSON.parse("data");
  // then work with parsed data
  return m('h1', 'Hello from trackingController')
 }
}

我可以从外部发送 json 数据到 trackingController 路由吗?

是的,路由可以插入参数。在您的示例中,您有一个 :numbers 参数,并且您的代码建议您期望一个 JSON 字符串。

Mithril 公开通过实体传递的数据的方式是通过 the vnode interface's attrs property. In the case of route components and route resolvers (like you're using here), attrs is a map of the URL parameters

在这个例子中,我使用 encodeURIComponent 来允许在 URL 中引入 JSON。我已经让渲染函数记录从 URI 路径接收到的解析数据并公开当前路由,以及一个文本框,您可以在其中编辑 JSON 结构并提交它以重新路由并查看新路由结果。

m.route.prefix("#");
m.route(document.getElementById('main'), "/trackingController/" + encodeURIComponent('[1,2]'), {
  "/trackingController/:numbers": {
    render: function(vnode) {
      console.log(
        'Received the following `numbers`:',
        JSON.parse(vnode.attrs.numbers)
      )

      return [
        m('h1', 'Hello from trackingController'),

        m('p', 'Current route is ',
          m('code', m.route.get())
        ),

        m('form', {
            onsubmit: function(e) {
              e.preventDefault()

              m.route.set(
                "/trackingController/" +
                encodeURIComponent(e.target.elements.input.value)
              )
            }
          },
          m('textarea#input', {
            value: vnode.attrs.numbers,
            style: {
              background: '#444',
              color: '#eee',
              display: 'block',
              padding: '1em',
            },
          }),

          m('button', 'Go!')
        ),
      ]
    }
  }
})
<script src="https://unpkg.com/mithril/mithril.js"></script>
<div id=main></div>