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.mzph.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;对于构建高效、灵活且易于维护的项目结构有着关键作用。本…