ABP之展現層(導航菜單)


 基本的增刪改查已經粗糙的結束了,接下來就是要方便的展示了,也就是導航菜單。在Abp中已經對導航欄的設置進行了相應的封裝(Abp.Application.Navigation),可以方便我們快速的將自己開發的頁面添加到首頁的導航欄中。

一.添加自己的導航菜單

當我們從ABP官網下載模板的時候,項目會自動的為我們在MVC項目中的StartUp文件夾中創建一個...NavigationProvider的文件,同時會添加基本的菜單:主頁、用戶、租戶、關於。

 

不但已經默認給我們創建了一個provider,而且已經給我們初始化了

 

看懂了模板中的菜單的定義方式和注意事項,接下就可以自定義我們的菜單

                                      

刷新一下頁面,我們自定義的頁面就這么輕易的創建了

                                  

二.導航菜單的具體創建流程

1. 幾個重要的類

NavigationManager菜單的和心類,這個類定義了MenuDefinition(主菜單)、NavigationConfiguration(導航菜單配置),同時調用NavigationProvider中的SetNavigation,完成菜單的初始化。

MenuDefinition:主菜單類,定義了一個List<MenuItemDefinition>,這個類存放了我們定義的菜單,同時定義了AddItem方法

從上面的源碼中可以看出我們最開始自定義的導航菜單的方法就是在這里定義的。

MenuItemDefinition:子菜單,這就是我們具體的展示在頁面上的菜單。它也定了一個List<MenuItemDefinition>和AddItem方法

從這邊的代碼中可以看出,因為子菜單中定義了List<MenuItemDefinition>,所以我們的菜單支持菜單的不斷的嵌套。

NavigationConfiguration:用來存放菜單的,我們上面的MenuItemDefinition定義的全部是每個菜單項的具體信息,那么整個菜單(provider)存放在哪呢,沒錯,就是這。比如最上面的我們自定義的導航類StudyABPProjectNavigationProvider : NavigationProvider

 

NavigationProvider:這個就是用來存放菜單的自定義類需要繼承的抽象類

 

現在總結一下:其實通過上面的幾個類就可以看出我們定義的菜單的實現流程了。

 首先我們創建自定義XXXProvider類繼承自NavigationProvider,並在Provider中定義好MenuItemDefinition。然后將provider添加到NavigationConfiguration中。最后通過NavigationManager調用Initialize方法,在這個方法里調用每個provider的SetNavigation方法,完成菜單的定義。

等一下,現在有一個問題,在最開始我們依葫蘆畫瓢定義自己的菜單的時候,需要為菜單定義權限,就是說擁有權限的用戶登陸才可以看到相應的菜單欄,我們的ABP系統是一個完善的具有權限管理的系統,我們上面的分析,通過NavigationManager初始化菜單,並沒有與權限有什么卵的關系。那么我們每個人登陸時獲取的菜單都是一樣的,這不就出問題了嘛。。。。。。。。。。。。。所以還有一個重要的類需要看一下,那就是UserNavigationManager

 

這就比較清楚了,哈哈哈

最后一個問題,如果我們想要獲取到我們定義的菜單,應該怎么做?

(1)通過NavigaitonManager(ISingleDependency單例模式)獲取所有菜單,所以我們可以直接通過注入的方式獲取到

(2)通過UserNavigatinManager(ITranseientDependency臨時注入模式)獲取指定用戶的菜單,可以通過依賴注入,也可以直接new出來

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM