我可以从外部将json数据发送到秘银路线吗

时间:2018-11-28 20:40:50

标签: routes mithril.js

例如,我有下一条mitril路线。

window.location.assign(url);

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

1 个答案:

答案 0 :(得分:1)

是的,路线可以插值参数。在您的示例中,您有一个:numbers参数,并且您的代码建议您使用JSON字符串。

秘银公开通过实体传递的数据的方法是通过the vnode interfaceattrs属性。对于路由组件和路由解析器(例如您在此处使用的路由),请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>