1. 程式人生 > 程式設計 >Blazor路由與頁面導航開發介紹

Blazor路由與頁面導航開發介紹

在 Blazor 中,應用中的每個頁面都是一個元件,通常在 razor 檔案中定義,具有一個或多個指定路由。 路由大多數發生在客戶端,而不涉及特定的伺服器請求。 瀏覽器首先發出對應用程式根地址的請求。 然後, Blazor 應用中的根 Router 元件會處理截獲導航請求,並將它們處理到正確的元件。

Blazor 中的路由由 Router 元件處理。 Router 元件通常在應用程式的根元件( App.Razor )中使用。

Router

下面是VisualStudio建立的預設App.Razor的模板設定

    <Router AppAssembly="@typeof(Program).Assembly">
    <Found Context="routeData">
        <RouteView RouteData="@routeData" DefaultLayout="@typeof(MainLayout)" />
    </Found>
    <NotFound>
        <LayoutView Layout="@typeof(MainLayout)">
            <p>Sorry,there's nothing at this address.</p>
        </LayoutView>
    </NotFound>
     </Router>

Router 元件將發現指定 AppAssembly 中和指定 AdditionalAssemblies 中的可路由元件。 當瀏覽器導航時,Router 會截獲導航,並使用提取的 RouteData 呈現其 Found 引數的內容(如果路由與地址匹配),否則 Router 將呈現其 NotFound 引數。
RouteView 元件會處理 RouteData 指定的匹配元件(如果有)。 如果匹配的元件沒有佈局,則使用可選的指定DefaultLayout 。

路由模板

在宣告的Razor元件當中,可以在元件當中定義一個或多個@Page "/xxx",通過該宣告表示該元件可用於Router的導航,否則只充當單個應用元件。

原因:Blazor 會編譯帶有 @page指令的.razor檔案,將為生成的類提供指定路由模板的 RouteAttribute,當瀏覽器發出對應用程式根地址的請求時,Blazor 應用中的根 Router 元件會處理截獲導航請求,並將它們處理到正確的元件,如果能夠找到元件,將會為其呈現在指定的 Layout 當中,否則呈現 NotFound 的自定義內容。 (關於Router元件的介紹)

新增@page "xxx" 引數是必需的,如果你需要用於導航,與ASP.NET Web窗體不同,指向Blazor元件的路由不會從其檔案位置推斷出來(儘管這可能是將來新增的功能)。

@page "/test/{text}"
@page "/test"

<h6>Hello</h6>
<h3>@Text</h3>

@code {
    [Parameter]
    public string Text { get; set; }
}

路由引數

在上面的程式碼中,@page "/test/{text}",尖括號的部分則代表路由引數,代表該頁面在導航時可以接受一個引數。
注意:當宣告路由引數的時候,由於需要該引數,則需要為該引數宣告一個元件引數 (不區分大小寫):

    @page "/NodePage/test/{Text}"

@code {
    [Parameter]
    public string TexT { get; set; }
}

路由約束

可以為路由引數設定路由約束,可以用於限定引數的型別,使用方式:

    @page "/Users/{Id:int}"

<h1>The user Id is @Id!</h1>

@code {
    [Parameter]
    public int Id { get; set; }
}

可用於約束的列表:

Blazor路由與頁面導航開發介紹

導航元件

NavLink 元件

建立導航連結時,請使用 NavLink 元件代替 HTML 超連結元素 ()。 aFwbEcNavLink 元件的行為方式類似於元素,但它根據其 active 是否與當前 URL 匹配來切換 href 類。

以下 NavMenu 元件建立啟動導航欄,該導航欄演示如何使用 NavLink 元件:

    <div class="@NavMenuCssClass" @onclick="@ToggleNavMenu">
    <ul class="nav flex-column">
        <li class="nav-item px-3">
            <NavLink class="nav-link" href="" Match=" rel="external nofollow" NavLinkMatch.All">
                <span class="oi oi-home" aria-hidden="true"></span> Home
            </NavLink>
        </li>
        <li class="nav-item px-3">
            <NavLink class="nav-link" href="MyComponent" rel="external nofollow"  Match="NavLinkMatch.Prefix">
                <span class="oi oi-plus" aria-hidden="true"></span> My Component
            </NavLink>
        </li>
    </ul>
</div>
  • NavLinkMatch.All – NavLink 在與當前整個 URL 匹配的情況下處於活動狀態。
  • NavLinkMatch.Prefix(預設)– NavLink 在與當前 URL 的任何字首匹配的情況下處於活動狀態。

NavigationManager

NavigationManager 服務,可用於:

  • 獲取當前瀏覽器地址
  • 獲取基址
  • 觸發器導航
  • 當地址更改時收到通知

在C#程式碼中,可以使用NavigationManager進行頁面導航,如下所示:

  • 1.在Razor中注入: @inject NavigationManager NavigationManager
  • 2.建立方法,使用NavigateTo 傳遞URL
    @inject NavigationManager NavigationManager
<button @onclick="NacigationToPage">NavigationTo</button>
@code{
    public void NacigationToPage()
    {
        NavigationManager.NavigateTo("/test/999");
    }
}

test.razor 頁面引用@page:

    @page "test/{text}"

//...

關於NavigationManager中的事件和方法說明:

Blazor路由與頁面導航開發介紹

到此這篇關於Blazor路由與頁面導航開發的文章就介紹到這了。希望對大家的學習有所幫助,也希望大家多多支援我們。