【问题标题】:read optional url parameters读取可选的 url 参数
【发布时间】:2025-12-05 07:05:02
【问题描述】:

我想在我的 sapui5 应用程序中捕获一个可选的 url 参数。

清单:

            "routes": [
            {
                "pattern": "page_1:query:",
                "name": "page_1",
                "target": [
                    "page_1"
                ]
            }]

控制器:

    handleRouteMatched: function(oEvent) {
        var oArgs, oView, oQuery;
        oArgs = oEvent.getParameter("arguments"); // undefined
        console.log(oEvent.mParameters);

测试用例

根据测试用例 PatternMatching

  • URLPattern:查询:

  • 清单模式:查询:

  • 将匹配:{"query":"test=123123,bla=123213"}

网址:

/webapp/index.html?test=123

没有价值: oEvent.mParameters.data.hash: ""

/webapp/index.html?#/query=123

有值:oEvent.mParameters.data.hash: query="123"

  • 为什么我必须添加 #/ ?
  • 如何避免添加 #/ ?

【问题讨论】:

    标签: javascript url routing sapui5


    【解决方案1】:

    我认为您在理解 UI5 路由概念时失败了。您不应该将其理解为 GET 请求。可以在哈希路由中传递的参数不是 GET 参数。

    首先,您应该了解 URL 的各个部分,在这种情况下,我们可以这样说:

    <host>:<port>?myGetParam1=value1&myGetParam2=value2#/My/Navigation/Pattern/ParamValue1/ParamValue2`
    

    ?# 你有GET 请求的参数。他们去服务器端。
    # 到最后你有你的哈希路由。在客户端使用。

    如果您在清单中将模式定义为

     /My/Navigation/Pattern/{ParamValue1}/:ParamValue2:
    

    那么下面的例子就可以了

    #/My/Navigation/Pattern/3 --> 将 3 作为强制的 paramValue1 传递,而对于可选的 paramValue2 则不传递任何内容

    #/My/Navigation/Pattern/3/2 --> 传递 3 作为强制 paramValue1 和 2 作为可选 paramValue2

    但是如果你尝试

    #/My/Navigation/Pattern/

    它将失败,因为您已将 paramValue1 设置为强制

    要获取这些参数,请在控制器中为“RouteMatched”事件定义一个事件处理程序。参数将在事件对象的“参数”中。解释清楚here

    我建议你通过this tutorial。它是 UI5 演示套件中最好的教程之一。

    【讨论】: