Fiori學習專題三十:Routing and Navigation

實際上我們的頁面是會有多個的,并且可以在多個頁面之間跳轉,這節課就學習如何在不同頁面之間實現跳轉。
1.修改配置文件manifest.json,加入routing,包含三個部分,config,routes,targets;

config :
routerClass:指明用哪個class做router,我們使用sap.m.routing.Router即可;
type:固定為view
viewType:指明view的種類,我們都是用xml
controlId:router對應的view里的控件的id
routes:
每個路由都有一個名稱name,模式pattern(url部分),以及一個或多個目標target;
targets:
每個目標定義一個視圖,甚至是一個組件。它與一個或多個路由關聯。

	{"_version": "1.65.0","sap.app": {"id": "ui5.walkthrough","i18n": "i18n/i18n.properties","title": "{{appTitle}}","description": "{{appDescription}}","type": "application","applicationVersion": {"version": "1.0.0"}, "dataSources": {"invoiceRemote": {"uri": "V2/Northwind/Northwind.svc/","type": "OData","settings": {"odataVersion": "2.0"}}}},"sap.ui": {"technology": "UI5","deviceTypes": {"desktop": true,"tablet": true,"phone": true}},"sap.ui5": {"dependencies": {"minUI5Version": "1.108.0","libs": {"sap.ui.core": {},"sap.m": {}}},"models": {"i18n": {"type": "sap.ui.model.resource.ResourceModel","settings": {"bundleName": "ui5.walkthrough.i18n.i18n","supportedLocales": [""],"fallbackLocale": ""}},"invoice": {"dataSource": "invoiceRemote"}},"rootView": {"viewName": "ui5.walkthrough.view.App","type": "XML","id": "app"},"resources": {"css": [{"uri": "css/style.css"}]},"routing": {"config": {"routerClass": "sap.m.routing.Router","type": "View","viewType": "XML","path": "ui5.walkthrough.view","controlId": "app","controlAggregation": "pages"},"routes": [{"pattern": "","name": "overview","target": "overview"},{"pattern": "detail","name": "detail","target": "detail"}],"targets": {"overview": {"id": "overview","name": "Overview"},"detail": {"id": "detail","name": "Detail"}}}}}

2.修改Component.js,在init() 方法初始化路由,這里不需要實例化路由,路由會根據我們的配置自動實例化并分配給組件;

sap.ui.define(["sap/ui/core/UIComponent","sap/ui/model/json/JSONModel"
], (UIComponent, JSONModel) => {"use strict";return UIComponent.extend("ui5.walkthrough.Component", {metadata: {interfaces: ["sap.ui.core.IAsyncContentCreation"],manifest: "json"},init() {// call the init function of the parentUIComponent.prototype.init.apply(this, arguments);// set data modelconst oData = {recipient: {name: "World"}};const oModel = new JSONModel(oData);this.setModel(oModel);// create the views based on the url/hashthis.getRouter().initialize();}});
});

3.新加一個頁面Overview.view.xml,嵌入之前課程做的兩個視圖

<mvc:ViewcontrollerName="ui5.walkthrough.controller.App"xmlns="sap.m"xmlns:mvc="sap.ui.core.mvc"displayBlock="true"><Page title="{i18n>homePageTitle}"><content><mvc:XMLView viewName="ui5.walkthrough.view.HelloPanel" /><mvc:XMLView viewName="ui5.walkthrough.view.InvoiceList" /></content></Page>
</mvc:View>

4.然后修改App.view,僅保留id屬性,這里id屬性賦值為app,就是之前路由配置的controlid.

<mvc:ViewcontrollerName="ui5.walkthrough.controller.App"xmlns="sap.m"xmlns:mvc="sap.ui.core.mvc"displayBlock="true"><Shell><Appclass="myAppDemoWT"id="app"/></Shell>
</mvc:View>

5.修改view InvoiceList.view.xml,加入type=“Navigation” 導航press=“.onPress” 點擊事件

<mvc:ViewcontrollerName="ui5.walkthrough.controller.InvoiceList"xmlns="sap.m"xmlns:core="sap.ui.core"xmlns:mvc="sap.ui.core.mvc">...<items><ObjectListItemcore:require="{Currency: 'sap/ui/model/type/Currency'}"title="{invoice>Quantity} x {invoice>ProductName}"number="{parts: ['invoice>ExtendedPrice','view>/currency'],type: 'Currency',formatOptions: {showMeasure: false}}"numberUnit="{view>/currency}"numberState="{= ${invoice>ExtendedPrice} > 50 ? 'Error' : 'Success' }"type="Navigation"press=".onPress" ><firstStatus><ObjectStatuscore:require="{Formatter: 'ui5/walkthrough/model/formatter'}"text="{path: 'invoice>Status',formatter: 'Formatter.statusText.bind($controller)'}"/></firstStatus></ObjectListItem></items></List>
</mvc:View>

6.修改InvoiceList.controller.js,加入onPress() 方法,通過getOwnerComponent().getRouter()訪問路由實例,然后navTo(“detail”)跳轉到detail頁面,detail這個參數就是manifest.json配置文件routes的pattern,然后根據pattern對應的name去targets里面找id,根據id對應的name去找webapp/view找頁面

sap.ui.define(["sap/ui/core/mvc/Controller","sap/ui/model/json/JSONModel","sap/ui/model/Filter","sap/ui/model/FilterOperator"
], (Controller, JSONModel, Filter, FilterOperator) => {"use strict";return Controller.extend("ui5.walkthrough.controller.InvoiceList", { onInit() {const oViewModel = new JSONModel({currency: "EUR"});this.getView().setModel(oViewModel, "view");},onFilterInvoices(oEvent) {// build filter arrayconst aFilter = [];const sQuery = oEvent.getParameter("query");if (sQuery) {aFilter.push(new Filter("ProductName", FilterOperator.Contains, sQuery));}// filter bindingconst oList = this.byId("invoiceList");const oBinding = oList.getBinding("items");oBinding.filter(aFilter);},onPress() {const oRouter = this.getOwnerComponent().getRouter();oRouter.navTo("detail");}});
});

7.新建頁面Detail.view.xml

<mvc:Viewxmlns="sap.m"xmlns:mvc="sap.ui.core.mvc"><Pagetitle="{i18n>detailPageTitle}"><ObjectHeader title="Invoice"/></Page>
</mvc:View>

最后在i18n加一個新的字符串

# Detail Page
detailPageTitle=Walkthrough - Details

這樣就實現了一個頁面之間的跳轉。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/80186.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/80186.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/80186.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【HarmonyOS NEXT+AI】問答05:ArkTS和倉頡編程語言怎么選?

在“HarmonyOS NEXTAI大模型打造智能助手APP(倉頡版)”課程里面&#xff0c;有學員提到了這樣一個問題&#xff1a; 鴻蒙的主推開發語言不是ArkTS嗎&#xff0c;本課程為什么使用的是倉頡編程語言&#xff1f; 這里就這位同學的問題&#xff0c;統一做下回復&#xff0c;以方便…

Booth Encoding vs. Non-Booth Multipliers —— 穿透 DC 架構看乘法器的底層博弈

目錄 &#x1f9ed; 前言 &#x1f331; 1. Non-Booth 乘法器的實現原理&#xff08;也叫常規乘法器&#xff09; &#x1f527; 構建方式 ?? 例子&#xff1a;4x4 Non-Booth 乘法器示意 &#x1f9f1; 硬件結構 ? 特點總結 ? 2. Booth Encoding&#xff08;布斯編碼…

GET請求如何傳復雜數組參數

背景 有個歷史項目&#xff0c;是GET請求&#xff0c;但是很多請求還是復雜參數&#xff0c;比如&#xff1a;參數是數組&#xff0c;且數組中每一個元素都是復雜的對象&#xff0c;這個時候怎么傳參數呢&#xff1f; 看之前請求直接是拼接在url后面 類似&items%5B0%5D.…

iOS App 安全性探索:源碼保護、混淆方案與逆向防護日常

iOS App 安全性探索&#xff1a;源碼保護、混淆方案與逆向防護日常 在 iOS 開發者的日常工作中&#xff0c;我們總是關注功能的完整性、性能的優化和UI的細節&#xff0c;但常常忽視了另一個越來越重要的問題&#xff1a;發布后的應用安全。 尤其是對于中小團隊或獨立開發者&…

A* (AStar) 尋路

//調用工具類獲取路線 let route AStarSearch.getRoute(start_point, end_point, this.mapFloor.map_point); map_point 是所有可走點的集合 import { _decorator, Component, Node, Prefab, instantiate, v3, Vec2 } from cc; import { oops } from "../../../../../e…

深度解析動態IP業務核心場景:從技術演進到行業實踐

引言&#xff1a;動態IP的技術演進與行業價值 在數字化轉型加速的今天&#xff0c;IP地址已從單純的網絡標識演變為支撐數字經濟的核心基礎設施。動態IP作為靈活高效的地址分配方案&#xff0c;正突破傳統認知邊界&#xff0c;在網絡安全防護、數據價值挖掘、全球業務拓展等領…

MySQL 性能調優:從執行計劃到硬件瓶頸

MySQL 性能調優&#xff1a;從執行計劃到硬件瓶頸 一、性能調優的宏觀視角與核心挑戰 在數字化浪潮下&#xff0c;企業數據量呈指數級增長&#xff0c;MySQL 作為主流關系型數據庫&#xff0c;面臨著巨大的性能壓力。某電商平臺日均訂單量突破千萬&#xff0c;高峰期數據庫響…

開源數字人框架 AWESOME - DIGITAL - HUMAN:技術革新與行業標桿價值剖析

一、項目核心價值:解鎖數字人技術新境界 1. 技術普及:降低準入門檻,推動行業民主化 AWESOME - DIGITAL - HUMAN 項目猶如一場技術春雨,為數字人領域帶來了普惠甘霖。它集成了 ASR、LLM、TTS 等關鍵能力,并提供模塊化擴展接口,將原本復雜高深的數字人開發流程,轉化為一…

robotframe啟動ride.py

我的雙擊ride.py會自動用pycharm打開&#xff0c;變成代碼文件 解決方法&#xff1a;定位到ride.py所在文件夾&#xff08;在anaconda的scripts里面&#xff09;&#xff0c;文件夾上方輸入cmd 再輸入該命令即可

怎樣簡單實現不同數據庫的表間的 JOIN 運算

數據分析涉及不同業務系統時就要做跨庫計算&#xff0c;而表間 JOIN 是最麻煩的&#xff0c;很多數據庫都不具備這樣的能力&#xff0c;用 Java 取數再計算又太復雜。用 esProc 完成跨庫 JOIN 會簡單很多。 數據與用例 車輛管理系統&#xff08;DB_Vehicle&#xff09;保存了…

Nacos源碼—4.Nacos集群高可用分析三

大綱 6.CAP原則與Raft協議 7.Nacos實現的Raft協議是如何寫入數據的 8.Nacos實現的Raft協議是如何選舉Leader節點的 9.Nacos實現的Raft協議是如何同步數據的 10.Nacos如何實現Raft協議的簡版總結 6.CAP原則與Raft協議 (1)CAP分別指的是什么 (2)什么是分區以及容錯 (3)為…

普通IT的股票交易成長史--20250509晚復盤

聲明&#xff1a; 本文章的內容只是自己學習的總結&#xff0c;不構成投資建議。價格行為理論學習可參考簡介中的幾位&#xff0c;感謝他們的無私奉獻。 送給自己的話&#xff1a; 倉位就是生命&#xff0c;絕對不能滿倉&#xff01;&#xff01;&#xff01;&#xff01;&…

python實現點餐系統

使用python實現點餐系統的增加菜品及價格&#xff0c;刪除菜品&#xff0c;查詢菜單&#xff0c;點菜以及會員折扣價等功能。 代碼&#xff1a; 下面展示一些 內聯代碼片。 # coding utf-8menu {拍黃瓜: 6, 小炒肉: 28, 西紅柿炒蛋: 18, 烤魚: 30, 紅燒肉: 38, 手撕雞: 45,…

從ellisys空口分析藍牙耳機回連手機失敗案例

問題背景&#xff1a; 前兩天同事發現我們現在做的項目&#xff0c;耳機在跟某些特定類型安卓手機&#xff08;尤其是比較新的手機&#xff09;回連會失敗&#xff0c;然后我幫他分析了一些log&#xff0c;記錄如下&#xff1a; 回連失敗所做步驟如下&#xff1a; 手機和耳機…

教育+AI:個性化學習能否顛覆傳統課堂?

近年來&#xff0c;人工智能&#xff08;AI&#xff09;技術迅猛發展&#xff0c;逐漸滲透到各行各業&#xff0c;教育領域也不例外。從智能輔導系統到自適應學習平臺&#xff0c;AI正在改變傳統的教學模式&#xff0c;使個性化學習成為可能。然而&#xff0c;這種變革能否真正…

【C++設計模式之Strategy策略模式】

C設計模式之Strategy策略模式 模式定義核心思想動機(Motivation)結構(Structure)實現步驟1. 定義策略接口&#xff08;基于繼承&#xff09;2.實現具體策略3.上下文類(Context)4. 在main中調用 應用場景&#xff08;基于繼承&#xff09;1.定義策略接口2.實現具體策略3.上下文類…

Python企業級MySQL數據庫開發實戰指南

簡介 Python與MySQL的完美結合是現代Web應用和數據分析系統的基石,能夠創建高效穩定的企業級數據庫解決方案。本文將從零開始,全面介紹如何使用Python連接MySQL數據庫,設計健壯的表結構,實現CRUD操作,并掌握連接池管理、事務處理、批量操作和防止SQL注入等企業級開發核心…

matlab轉python

1 matlab2python開源程序 https://blog.csdn.net/qq_43426078/article/details/123384265 2 網址 轉換網址&#xff1a;https://app.codeconvert.ai/code-converter?inputLangMatlab&outputLangPython 文件比較網址&#xff1a;https://www.diffchecker.com/text-comp…

Vue 3 中編譯時和運行時的概念區別

文章目錄 前言Vue 3 中的編譯時 vs 運行時區別模板在編譯時轉化為渲染函數編譯時的優化處理運行時的工作:創建組件實例與渲染流程前言 詳細整理 Vue 3 中編譯時和運行時的概念區別,并重點解釋為什么組件實例是在運行時創建的。 我會結合官方文檔、源碼分析和社區解釋,確保內…

Spring 框架實戰:如何實現高效的依賴注入,優化項目結構?

Spring 框架實戰&#xff1a;如何實現高效的依賴注入&#xff0c;優化項目結構&#xff1f; 在當今的 Java 開發領域&#xff0c;Spring 框架占據著舉足輕重的地位。而依賴注入作為 Spring 的核心概念之一&#xff0c;對于構建高效、靈活且易于維護的項目結構有著關鍵作用。本…