Lightning Blog
Blazor記事イメージ画像

【Blazor】 NavigationManagerの使い方

更新日:2023/07/25
Blazorのデフォルトで登録されているNavigationManagerを利用する方法について解説します。

    目次

  • NavigationManagerとは?
  • 基本的な使用方法
  • NavigationManagerの主な機能
  • NavigationManagerを使ってみよう

NavigationManagerとは?

セクション画像

BlazorのNavigationManagerは、クライアントサイドのルーティングを管理するためのクラスです。 これを使用すると、ユーザーがアプリケーション内の異なるページ間を移動する際に、URLの変更やページの表示を制御することができます。

例えば、ユーザーがフォームを送信した後に別のページにリダイレクトする場合などに利用されます。


基本的な使用方法

セクション画像

まずNavigationManagerを使うためには、サービスを挿入する必要があります。 newしてインスタンスを作成するわけではないので、注意してください。 このサービスはデフォルトでBlazorにサービス登録されていますので、program.csでサービス登録する必要はありません。

具体的なコードは以下のようになります。 NavigationManagerを利用するには、以下のように@injectを使用して、 NavigationManagerをコンポーネントに注入します。


@* NavigationManagerサービスを挿入する *@
@inject NavigationManager NavigationManager

こうすることで、NavigationManagerの様々な機能を利用することができます。


NavigationManagerの主な機能

セクション画像
NavigationManagerには様々な機能が備わっています。 以下の表はURLがhttps://localhost:5001/counter/3?q=hiの場合のメソッドの挙動をまとめています。
メソッドorプロパティ 機能説明または取得する値
NavigationManager.Uri https://localhost:5001/counter/3?q=hiを取得する
NavigationManager.BaseUri https://localhost:5001/を取得する
NavigationManager.NavigateTo("counter") 新しい場所(カウンタページ)に移動します。
NavigationManager.LocationChanged Blazorアプリケーション内でURLの変更が発生したときに通知を受けるためのイベント
NavigationManager.ToAbsoluteUri("counter") counterページまでのURIクラスを返す
NavigationManager.ToBaseRelativePath(NavigationManager.Uri) counter/3?q=hiを取得する

これらのメソッドやプロパティを駆使すると、ナビゲーションを行う際にとても便利です。 次のセクションでは、具体的なコードを見ていきます。


NavigationManagerを使ってみよう

セクション画像

NavigationManagerを試しに使ってみます。

NavigationManagerには様々な機能がありますが、 今回はボタンを押すとデフォルトで存在するカウンターページへ遷移し、 その際にログも合わせて出力するプログラム例を見ていきます。 BlazorプロジェクトのIndex.razorを以下のように書き換えます。


@page "/"
@using Microsoft.AspNetCore.Components
@using System.Diagnostics
@inject NavigationManager NavigationManager
@implements IDisposable

<button @onclick="NavigateToCounter">Counterへ移動</button>

@code {
    protected override void OnInitialized()
    {
        // ページ遷移したときのイベントを登録
        NavigationManager.LocationChanged += LocationChangedHandler;
    }

    /// <summary>
    /// ページ遷移したときの処理
    /// </summary>
    private void LocationChangedHandler(object? sender, LocationChangedEventArgs e)
    {
        Debug.WriteLine($"遷移先URL: {e.Location}");
    }

    /// <summary>
    /// counterページへ移動
    /// </summary>
    private void NavigateToCounter()
    {
        NavigationManager.NavigateTo("/counter");
    }

    /// <summary>
    /// ページ遷移後の破棄処理
    /// </summary>
    public void Dispose()
    {
        NavigationManager.LocationChanged -= LocationChangedHandler;
    }
}

初期化処理であるOnInitializedでは、 ページ遷移した際のイベントであるNavigationManager.LocationChangedにログ出力するメソッドを登録しています。

ボタンクリックの際に、NavigationManager.NavigateToメソッドを使って、画面遷移するようにしています。 NavigationManager.NavigateToメソッドには、遷移先のページのURLである/counterを指定しています。

Disposeメソッドでは、ページ遷移後はログ出力のメソッドを解除するために書いています。

それでは実行してみましょう。ボタンをクリックして画面が遷移するかを確かめます。

画面遷移前
遷移前
画面遷移後
遷移後

画面が遷移されることが確認できました。 この機に、NavigationManagerの機能を色々試してみてください。


ブログ内の記事で書かれているサンプルコードは、GitHubから確認する事ができます。 是非参考にしてみてください。

この本では、Blazorの基本から高度なテクニックまで、実際のプロジェクトに役立つ知識を網羅しています。 初心者から経験者まで、Blazorを扱うすべての開発者にとっての必読書です。 この記事の執筆者も参考にした「Blazor入門」で、あなたのBlazorスキルを飛躍的に向上させませんか?

合わせて読みたい

カード画像
DOMイベント一覧

この記事では、Blazorで使用可能なDOMイベントに関する包括的なガイドを提供しています。DOM(Document Object Model)はウェブページの内容や構造を表現するための仕組みであり、Blazorを用いることで、さまざまなDOMイベントを効果的に扱うことが可能です。記事は、onabortからonwheelまで、様々なイベントの名前と発生条件を詳細な表形式で紹介しています。これにより、Blazor開発者は適切なイベントを状況に応じて選択し、ウェブページのインタラクティビティを高めることができます。

更新日:2023/09/03

カード画像
JavaScriptを呼び出し方

BlazorでWEB開発は主にHTML, CSS, C#を使用しますが、JavaScriptの利用も避けられない場面がある。JavaScriptをBlazor内で呼び出すためには、IJSRuntimeサービスを利用する。IJSRuntimeを用いることで、C#からJavaScriptの関数を非同期的に実行可能。例として、ボタンクリックでJavaScriptのアラートを表示する方法を説明。BlazorでのJavaScript使用は最小限に留めるべきだが、必要な場面での知識は重要。

更新日:2023/07/19

An error has occurred. This application may no longer respond until reloaded. Reload 🗙