读取可选的 url 参数

Med*_*era 0 javascript url routing sapui5

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

显现:

            "routes": [
            {
                "pattern": "page_1:query:",
                "name": "page_1",
                "target": [
                    "page_1"
                ]
            }]
Run Code Online (Sandbox Code Playgroud)

控制器:

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

测试用例

根据测试用例模式 匹配

  • 网址模式:查询:

  • 清单模式:查询:

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

网址:

/webapp/index.html?test=123

没有值:oEvent.mParameters.data.hash:“”

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

有值:oEvent.mParameters.data.hash:查询=“123”

  • 为什么我必须添加 #/ ?
  • 我怎样才能避免添加 #/ ?

Raf*_*nez 5

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

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

<host>:<port>?myGetParam1=value1&myGetParam2=value2#/My/Navigation/Pattern/ParamValue1/ParamValue2`
Run Code Online (Sandbox Code Playgroud)

?#您有 GET 请求的参数。他们去服务器端。
从头到尾,#您都有自己的哈希路由。在客户端使用。

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

 /My/Navigation/Pattern/{ParamValue1}/:ParamValue2:
Run Code Online (Sandbox Code Playgroud)

那么下面的例子将起作用

#/My/Navigation/Pattern/3 --> 它传递 3 作为必需的paramValue1而没有传递给可选的paramValue2

#/My/Navigation/Pattern/3/2 --> 它传递 3 作为必需的paramValue1和 2 作为可选的paramValue2

但是,如果您尝试

#/我的/导航/模式/

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

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

我建议您阅读本教程。它是 UI5 演示套件中最好的教程之一。