TinyEngine v2.2版本發布:支持頁面嵌套路由,提升多層級路由管理能力開發分支調整

2025年春節假期已過,大家都帶著慢慢的活力回到了工作崗位。為了讓大家在新的一年繼續感受到 Tiny Engine 的成長與變化,我們很高興地宣布:TinyEngine v2.2版本正式發布!本次更新帶來了重要的功能增強------頁面支持嵌套路由,讓開發者在構建復雜應用時更加得心應手。接下來,我們將詳細介紹該版本的幾大亮點與改進

v2.2.0變更特性概覽

  1. 頁面支持嵌套路由,出碼支持多層級路由嵌套結構
  2. 物料協議npm字段整改,物料協議新增字段:materials.packages
  3. 狀態管理默認值支持表達式
  4. 默認開啟區塊插件中的區塊分類與物料插件中區塊分組合并的選項
  5. 修復了多個問題,包括Element Plus出碼樣式引入、I18n格式化、國際化配置彈窗異常等
  6. 默認分支變更,refactor/develop 分支更改為 develop

詳情可見:https://github.com/opentiny/tiny-engine/releases/tag/v2.2.0

TinyEngine v2.2.0新特性解讀

1. 頁面支持嵌套路由

Vue 的路由管理器 vue-router 在前端項目中得到了廣泛應用,尤其是其強大的嵌套路由功能,能夠讓開發者以層級化的方式組織和渲染頁面組件。TinyEngine 在2.2.0版本之前,雖然出碼也引入了 vue-router,但是頁面路由僅有頂層路由,不支持嵌套。為了更好地管理復雜的頁面結構和提升開發效率,我們在此次更新中引入了嵌套路由的支持,特別是將 vue-router 中常用的 router-link 和 router-view 引入 TinyEngine 低代碼平臺。這一功能使得開發者能夠像在 Vue 項目中一樣,靈活地管理多層級路由,輕松實現頁面的嵌套和跳轉,從而提升了平臺的可用性和開發效率,幫助開發人員更快速地構建出符合需求的應用程序。

頁面支持嵌套路由大特性,帶來10余項路由相關全新能力:

  • 畫布渲染器:支持多層級的父子頁面嵌套渲染,并在頁面切換時實現局部切換刷新,提供更加靈活的渲染體驗
  • 頁面管理插件:支持在靜態頁面下任意層級創建子頁面,并允許通過拖拽進行頁面編排,使頁面管理更加直觀便捷
  • 畫布容器:畫布頂部新增了路由指示器,幫助開發者更清晰地查看頁面路由結構
  • 內置物料:新增了 RouterLink、RouterView,以及橫向和豎向導航的快捷 snippet,為快速構建頁面提供了更多選擇
  • 屬性配置:新增頁面選擇器,支持選擇跳轉頁面
  • 預覽模塊:在單頁預覽時,支持嵌套視圖的預覽,提供更完整的視圖展示
  • 出碼模塊:支持多層級路由嵌套結構的輸出,優化了復雜項目的開發流程
  • 畫布容器右鍵功能增強:增加了 RouterLink 的右鍵菜單功能,可以快速進行路由跳轉
  • 畫布容器工具增強:增加非激活頁面懸停,支持 RouterLink 組件懸停菜單,并支持通過懸停菜單直接點擊進行跳轉,提升了操作的便捷性
  • 工具欄:新增了切換嵌套視圖和單頁視圖的功能,使得頁面查看和編輯更加靈活

接下來我們將逐步操作來展示上述新增的特性

演示的最終效果會達到如下圖所示。

Root 頁面為父頁面,擁有3個子頁面,分別可以使用導航欄中的路由鏈接進行跳轉。跳轉到子頁面后同時顯示父頁面,父子頁面嵌套渲染

支持靜態頁面下新建子頁面。首先進入頁面管理插件,新增一個 Root 頁面,新建完成后,懸停 Root 項,點擊右側出現的菜單項,接著點擊新建子頁面。彈出的表單中,表單項"父文件夾/父頁面"會自動填充,填寫表單項"頁面名稱"和"頁面路由"然后保存,即可新建一個子頁面。這里我們新建一個子頁面,名為 Home

頁面樹支持拖拽編排。 為了演示拖拽編排功能,我們先在根目錄新建一個頁面名為 Intro,新建完成后可以看到 Intro 頁面是在頂層。然后拖拽 Intro 頁面到 Root 頁面下,松開鼠標后頁面右上角提示"保存成功"說明拖拽已完成

接著再添加一個子頁面名為 Docs,你可以參考剛剛添加 Intro 頁面的步驟添加 Docs 頁面,也可以直接在 Root 頁面下新建子頁面。最終 Root 頁面的樹結構為這樣

新增了內置物料,屬性配置中新增頁面選擇器。打開 Root 頁面,我們從物料拖入導航條和路由視圖。導航條是預設的多個路由鏈接組成的 snippet,路由鏈接設置好跳轉頁面后可以用來跳轉到其他路由,路由視圖則是子路由插槽。這里的邏輯和 vue-router 是保持一致的,并且最終出碼也是使用的 vue-router。在這里我們給每個路由鏈接設置到對應的路由

RouterLink 增加右鍵菜單路由跳轉,或者通過懸停菜單點擊后跳轉。畫布頂部的路由指示器,也可以點擊跳轉。 如下圖操作所示,我們給每個子頁面添加一條簡單的文本,方面查看當前子頁面是哪一個。可以通過點擊路由鏈接的右鍵菜單來實現路由跳轉,需要注意的是,右鍵菜單只能在當前編輯(激活)頁面的組件上生效。所以我們額外增加了一種交互方式,當你懸停在路由鏈接上時,無論此時路由鏈接是否能夠編輯,可以點擊右上角出現的跳轉按鈕來實現路由跳轉

畫布渲染器:支持父子多層級頁面嵌套渲染,支持切換頁面的時候局部切換刷新。 如上圖所示,在跳轉到子頁面后嵌套渲染了父子頁面,在子路由之間切換只進行了局部刷新

預覽時,支持單頁預覽的時候嵌套視圖預覽。 如下圖所示,單頁預覽子頁面時,會同時顯示父頁面內容。橫向導航條屬于父頁面內容,導航條下面的"我是 Home 頁"文本則屬于子頁面內容

工具欄增加切換嵌套視圖/單頁視圖。 點擊頁面右上角的菜單按鈕,可以查看到新增了"切換到單頁/嵌套視圖"的選項。使用此選項來進行嵌套視圖/單頁視圖的切換

出碼支持多層級路由嵌套結構的輸出。 上述應用最終出碼的路由文件如下

import { createRouter, createWebHashHistory } from 'vue-router'
const routes = [{name: '8984',path: 'Root',component: () => import('@/views/Root.vue'),children: [{name: '8987',path: 'Docs',component: () => import('@/views/Root/Docs.vue'),children: []},{name: '8985',path: 'Home',component: () => import('@/views/Root/Home.vue'),children: []},{name: '8986',path: 'Intro',component: () => import('@/views/Root/Intro.vue'),children: []}]},{name: '8903',path: 'test',component: () => import('@/views/Test.vue'),children: []},{name: '8907',path: 'Untitled',component: () => import('@/views/Untitled.vue'),children: []}
]export default createRouter({history: createWebHashHistory(),routes: [{ path: '/', children: routes }]
})

2. 物料協議更新

(1)將組件依賴的組件庫信息從組件 npm 字段中提取到 materials.packages 字段統一管理

(2)兼容了原來的字段配置

3. 狀態管理默認值支持表達式

背景:如果頁面狀態變量配置了 getter、setter。但是默認值為表達式的場景,出碼會有 bug。

比如:

{// 狀態變量"state": {"IconPlusSquare": {// 默認值為表達式"defaultValue": {"type": "JSResource","value": "this.utils.IconPlusSquare()"},// 帶有 getter 或者是 getter"accessor": {"getter": {"type": "JSFunction","value": "function() { this.state.IconPlusSquare = `${this.state.firstName} ${this.state.lastName}` }"}}}}
}

舊版本無法支持該場景下的出碼,新版本支持正常出碼為:

// 狀態默認值出碼
const state = vue.reactive({IconPlusSquare: utils.IconPlusSquare(),
})// getter 出碼
vue.watchEffect(wrap(function () {this.state.IconPlusSquare = `${this.state.firstName} ${this.state.lastName}`})
)

TODO: 當前僅在出碼側進行了支持,變量插件側需要后續支持配置復雜的狀態變量初始值。

4. 默認開啟區塊插件中的區塊分類與物料插件中區塊分組合并的選項

在之前 v2.1.0 版本的更新中,提供了將區塊插件中的區塊分類與物料插件中區塊分組合并的選項,此功能是提供給Java版本的后端使用,v2.2.0 版本默認打開了此功能

如果你使用了Java版本的后端,無需再修改注冊表配置,mergeCategoriesAndGroups 默認值為 true

如果你使用了NodeJS版本的后端,將注冊表中的區塊插件中的 mergeCategoriesAndGroups 修改成 false

export default {// ...plugins: [Materials,Tree,Page,// NodeJS版本后端,Block 插件設置 mergeCategoriesAndGroups 選項 為 false[Block, { options: { ...Block.options, mergeCategoriesAndGroups: false } }],Datasource,Bridge,I18n,Script,State,Schema,Help,Robot],// ...
}

5. 其他:交互、功能細節優化 & bug 修復

  • 修復:state getter、setter 無法保存修改與globalState getter 在畫布計算不正確問題@chilingling #930
  • 修復:區塊有插槽和傳參時出碼異常問題@chilingling #919
  • 修復:自定義區塊和組件預覽時,無法完整正確渲染出內容(組件或區塊缺失)@chilingling #920
  • 修復:使用Java后端在區塊管理創建分組時因參數類型錯誤導致報錯問題@gene9831 #985
  • 修復:解決物料中使用相對路徑腳本時動態組件 URL 錯誤的問題。@BWrong #958
  • 修復:切換頁面或區塊時未清除選中區域問題@chilingling #992
  • 修復:編輯器中國際化詞條配置彈窗切換全屏時位置問題@yy-wow #969
  • 優化:頁面 JS 插件編輯器增加代碼示例提示。通過@SonyLeo #1012
  • 修復:解決刷新頁面后保存插件勾選自動保存狀態無效的問題@SonyLeo #1004
  • 修復:頁面設置中的父表單字段不顯示@gene9831 #1069
  • 修復:數據源類型選擇顯示異常@SonyLeo #1082
  • 修復:出碼包含 element-plus 時,沒有引入樣式的bug @chilingling #817
  • 修復:國際化詞條下拉選擇選項格式問題 @yy-wow #950
  • 修復:點擊國際化配置區域會導致當前屬性配置彈窗整體關閉的問題 @yy-wow #970

以上是此次更新問題修復的主要內容,更多細節請查看 v2.2.0 changelog Bug Fixes

6. 默認分支變更

背景:在過去我們 TinyEngine v2.0 版本重構開發過程中,v2.0 開發分支 refactor/develop 與 v1.0 開發分支 develop 同步迭代演進,如今 v2.0 版本已完成架構調整趨于穩定,同時兩個版本也存在較大差異不便于直接合入,后續雙分支演進重新調整為:v2.0 版本分支設為默認分支持續迭代演進,v1.0 版本不增加新特性只修復問題。在 24 年 12 月份已經完成 TinyEngine develop 分支重命名為 v1.x 分支,refactor/develop 分支設置為默認分支的調整。

本次將默認分支 refactor/develop 重命名為 develop,調整后更符合語義與分支命名規范。后續所有新分支將基于 develop 分支開發,需要確保本地倉庫同步更新,可以參考下面步驟:

a)先修改遠程倉庫設置:如果是基于 TinyEngine fork 的項目,在 fork 倉庫的分支管理頁面: https://github.com/{YourUserName}/tiny-engine/branches ,將 refactor/develop 分支重命名為 develop(如果是基于 TinyEngine clone 的項目可以忽略該步驟)
在這里插入圖片描述

b)然后修改本地倉庫:

# 獲取最新分支信息
git fetch origin
# 重命名本地分支
git branch -m refactor/develop develop
# 更新本地分支的遠程跟蹤分支
git branch --set-upstream-to=origin/develop develop
# 刪除舊的遠程分支引用(可選)
git fetch --prune

如何使用新版本

  • 如果是從 2.0.0 版本升級上來,只需要在 cli 創建出來的工程,將 @opentiny/tiny-engine 相關的依賴,升級到 2.2.0 即可
  • 如果是從 1.x 版本升級上來,需要參考遷移指南,升級到 2.2 版本
  • 如果是全新創建項目,僅需要使用 tinyengine-cli 創建項目即可。npx @opentiny/tiny-engine-cli create-platform my-designer

結語

隨著 TinyEngine v2.2.0 版本的發布,路由嵌套視圖、頁面管理與渲染能力得到了極大的提升,讓開發者在構建復雜應用時更加高效、靈活。此外,物料資產包協議和界面交互的優化進一步提升了開發體驗。我們將繼續致力于提供更強大的功能和更加完善的細節優化,感謝大家的支持與反饋,期待在未來版本中為您帶來更多驚喜!
同時歡迎大家給OpenTiny提建議:【OpenTiny調研征集】共創技術未來,分享您的聲音!

關于OpenTiny

歡迎加入 OpenTiny 開源社區。添加微信小助手:opentiny-official 一起參與交流前端技術~

OpenTiny 官網:https://opentiny.design

OpenTiny 代碼倉庫:https://github.com/opentiny

TinyVue 源碼:https://github.com/opentiny/tiny-vue

TinyEngine 源碼:?https://github.com/opentiny/tiny-engine

歡迎進入代碼倉庫 Star🌟TinyEngine、TinyVue、TinyNG、TinyCLI~ 如果你也想要共建,可以進入代碼倉庫,找到 good first issue標簽,一起參與開源貢獻~

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

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

相關文章

LSTM長短期記憶網絡-原理分析

1 簡介 概念 LSTM(Long Short-Term Memory)也稱為長短期記憶網絡,是一種改進的循環神經網絡(RNN),專門設計用于解決傳統RNN的梯度消失問題和長程依賴問題。LSTM通過引入門機制和細胞狀態,能夠更…

SQL Server 中遇到的常見問題集

SQL Server 中遇到的常見問題集 問題一: 無法創建關系“FK_Research_Teacher”。 ALTER TABLE 語句與 FOREIGN KEY 約束"FK_Research_Teacher"沖突 解決方法: 外鍵表中的數據主鍵表中是有的,并且不能刪除主外鍵表中數據 1&…

神經網絡中感受野的概念和作用

在神經網絡中,感受野(Receptive Field)是指某個神經單元(神經元或者卷積核)關注的輸入特征區域的大小。它決定了神經網絡對輸入數據的特定區域的感知能力。 感受野的形成過程 在卷積神經網絡中,卷積層是感受…

unreal engine gameplay abiliity 獲取ability的cooldown剩余時間

unreal engine gameplay abiliity 獲取ability的cooldown 版本 5.4.4 參考 測試代碼 if (HasAuthority() && AbilitySystemComponent){TArray<FGameplayAbilitySpecHandle> OutAbilityHandles;AbilitySystemComponent->GetAllAbilities(OutAbilityHandles…

【leetcode hot 100 42】接雨水

錯誤解法&#xff1a;若height[left]>height[right]則代表有坑 class Solution {public int trap(int[] height) {int left 0;int area 0;while(left<height.length-1){// 找坑int right left1;while(right<height.length-1 && height[left]>height[ri…

Spark map與mapPartitions算子源碼級深度解析

Spark map與mapPartitions算子源碼級深度解析 一、核心源碼結構差異 1. map算子實現邏輯 def map[U: ClassTag](f: T => U): RDD[U] = withScope {val cleanF = sc.clean(f)new MapPartitionsRDD[U, T](this, (context, pid, iter) => iter.map(cleanF)) }實現特征: …

【前端進階】09 編程思維:從事件驅動到數據驅動

事件驅動與數據驅動 GUI與事件事件驅動數據驅動事件驅動和數據驅動的區別 GUI與事件 JavaScript作為瀏覽器的腳本語言&#xff0c;主要用途是與用戶互動、操作DOM&#xff0c;實現頁面UI和DOM操作&#xff0c;屬于GUI&#xff08;圖形用戶界面&#xff09;編程 GUI程序注重用…

WPF-3天快速WPF入門并達到企業級水準

嘿&#xff0c;小伙伴們&#xff01;如果你已經有一定的C#開發基礎&#xff0c;但想快速掌握WPF開發&#xff0c;達到企業級水準&#xff0c;那接下來的這個三天快速入門計劃絕對適合你&#xff01;雖然聽起來有點挑戰&#xff0c;但別擔心&#xff0c;只要跟著這個高強度、結構…

【實戰 ES】實戰 Elasticsearch:快速上手與深度實踐-1.3.1單節點安裝(Docker與手動部署)

&#x1f449; 點擊關注不迷路 &#x1f449; 點擊關注不迷路 &#x1f449; 點擊關注不迷路 文章大綱 10分鐘快速部署Elasticsearch單節點環境1. 系統環境要求1.1 硬件配置推薦1.2 軟件依賴 2. Docker部署方案2.1 部署流程2.2 參數說明2.3 性能優化建議 3. 手動部署方案3.1 安…

小程序中的插槽(Slot)機制及其與 Vue 組件的異同

小程序中的插槽&#xff08;Slot&#xff09;機制及其與 Vue 組件的異同 引言 在小程序開發中&#xff0c;組件化開發是一種重要的設計模式&#xff0c;而插槽&#xff08;Slot&#xff09;機制則是實現組件內容分發的關鍵。通過插槽&#xff0c;開發者可以更靈活地構建可復用…

vscode下載安裝教程(附安裝包)vscode圖文安裝教程最新版

文章目錄 一、vscode下載二、vscod安裝教程1.啟動vscode安裝程序&#xff1a;2.應對提示&#xff1a;3.接受協議&#xff1a;4.更改vscode安裝路徑&#xff1a;5.推進安裝vscode&#xff1a;6.創建vscode快捷方式&#xff1a;7.開始安裝vscode&#xff1a;8.完成vscode安裝&…

Redis 緩存穿透、擊穿、雪崩:問題與解決方案

在使用 Redis 作為緩存中間件時&#xff0c;系統可能會面臨一些常見的問題&#xff0c;如 緩存穿透、緩存擊穿 和 緩存雪崩。這些問題如果不加以解決&#xff0c;可能會導致數據庫壓力過大、系統響應變慢甚至崩潰。本文將詳細分析這三種問題的起因&#xff0c;并提供有效的解決…

智能客服進化論:AI呼叫中心系統如何重塑企業服務競爭力?

導語&#xff1a;當客戶咨詢量激增300%時&#xff0c;你的客服團隊還能從容應對嗎&#xff1f; 在數字化轉型加速的今天&#xff0c;企業客戶服務正經歷從"人力密集型"向"智能集約化"的質變。AI呼叫中心系統作為這場變革的核心引擎&#xff0c;已幫助超過…

異常c/c++

目錄 1.c語言傳統處理錯誤方式 1、終止程序 2、返回錯誤碼 2.c異常概念 3.異常的使用 3.1異常的拋出與捕獲 3.2異常安全&#xff08;還有一些異常重新拋出&#xff09; 3.3異常規范 4.自定義異常體系 5.c標準庫的異常體系 6.異常優缺點 1、優點 2、缺點 7、補充 1.…

ChatGPT 提示詞框架

作為一個資深安卓開發工程師&#xff0c;我們在日常開發中經常會用到 ChatGPT 來提升開發效率&#xff0c;比如代碼優化、bug 排查、生成單元測試等。 但要想真正發揮 ChatGPT 的潛力&#xff0c;我們需要掌握一些提示詞&#xff08;Prompt&#xff09;的編寫技巧&#xff0c;并…

面試基礎---JVM 運行時數據區

深入理解 JVM 運行時數據區&#xff1a;從源碼到實踐 在現代互聯網大廠的開發環境中&#xff0c;Java 依然是主流語言之一&#xff0c;而 Java 虛擬機&#xff08;JVM&#xff09;作為 Java 程序運行的基礎&#xff0c;其性能和穩定性直接關系到應用的表現。因此&#xff0c;深…

PostgreSQL 查看數據庫及表中數據占用空間大小

1、應用場景 場景1&#xff1a;查看數據庫占用空間大小 SELECT pg_size_pretty(pg_database_size(database_name));場景2&#xff1a;查看每張表占用空間大小 SELECTtable_schema || . || table_name AS table,#僅表數據pg_size_pretty(pg_relation_size(table_schema || . …

c++中打印任意類型任意長度數組的各種方式

目錄 一、代碼 二、詳細解釋 1. print 函數模板 2. array_size 函數模板 3. print1 函數模板 4. print2 函數模板 5. my_begin 和 my_end 函數模板 6. print3 函數模板 7. main 函數 總結 一、代碼 如下代碼給出了5種方式打印任意類型任意長度的數組。這段代碼定義了…

ubuntu下r8125網卡重啟丟失修復案例一則

剛裝的一臺服務器&#xff0c;ubuntu24.04&#xff0c;主板網卡是r8125&#xff0c;安裝服務后會莫名其妙丟失驅動 按照官網的方法下載最新8125驅動包&#xff1a; Realtek 然后卸載驅動 rmmod r8125 然后在驅動包里安裝&#xff08;幸好我之前裝了build-essential&#x…

[Python學習日記-84] 進程理論

[Python學習日記-84] 進程理論 簡介 進程的概念 并發與并行的區別 進程并發的實現 簡介 進程理論是計算機科學中一種重要的概念&#xff0c;用來描述操作系統中執行的程序實例。在操作系統中&#xff0c;每個程序的執行被稱為一個進程。進程理論研究進程的創建、調度、通信…