Blazor 导航

本文详细描述了在Blazor项目中创建和使用INavigationService接口,实现页面跳转,以及在Result页面中通过InfiniteScroll和按钮触发导航。同时展示了服务注册和依赖注入的过程。
摘要由CSDN通过智能技术生成
1、添加接口
INavigationService.cs
namespace MauiApp2.Library.Services;

public interface INavigationService
{
    // /detail/1
    // /detail/?id=1
    // http://no.such.url/showNews.aspx?id=1
    void NavigationTo(string uri);

    // /showNews new NewObject{ Title = "",Countent = "" }
    void NavigationTo(string uri, object parameter);
}

public static class NavigationServiceContents
{
    public const string TodayPage = "/today";
    public const string InitializationPage = "/initialization";
    public const string ResultPage = "/result";
    public const string DetailPage = "/detail";
}
2、实现接口
NavigationService.cs
using Microsoft.AspNetCore.Components;

namespace MauiApp2.Library.Services;

public class NavigationService : INavigationService
{
    private readonly NavigationManager _navigationManager;

    public NavigationService(NavigationManager navigationManager) => _navigationManager = navigationManager;

    public void NavigationTo(string uri) => _navigationManager.NavigateTo(uri);

    public void NavigationTo(string uri, object parameter)
    {
        throw new NotImplementedException();
    }
}
3、添加页面
Detail.razor
@page "/detail/{id}"

<h3>@Id</h3>

Detail.razor.cs
using Microsoft.AspNetCore.Components;

namespace MauiApp2.Library.Pages;

public partial class Detail
{
    [Parameter]
    public string? Id { get; set; }

}
4、添加入口
Result.razor
@page "/result"
@using Sve.Blazor.InfiniteScroll.Components

@inject IPoetryStorage _poetryStorage
@inject INavigationService _navigationService

<Button OnClick='()=>_navigationService.NavigationTo("/detail/1")'>详情</Button>

<!-- 无限列表 -->
<InfiniteScroll ObserverTargetId="observerTarget" ObservableTargetReached=" _ => LoadMoreAsync()">
    @foreach (var poetry in _poetries)
    {
        <div>
            <Card>
                <BodyTemplate>
                    <span style="font-weight:bold;color:#0078d4">@poetry.Name</span>
                    <div class="shim-2xs"></div>
                    @poetry.Dynasty @poetry.Author
                    <div class="shim-2xs"></div>
                    @poetry.Snipper
                </BodyTemplate>
            </Card>
        </div>
        <div class="shim-xl"></div>
    }
    <!--加载更多-->
    <div id="observerTarget">@_status</div>
</InfiniteScroll>

5、注册依赖
Program.cs
using MauiApp2.Library.Services;
using MauiApp2.Web.Data;
using MauiApp2.Web.Services;

var builder = WebApplication.CreateBuilder(args);

// Add services to the container.
builder.Services.AddRazorPages();
builder.Services.AddServerSideBlazor();
builder.Services.AddSingleton<WeatherForecastService>();
builder.Services.AddBootstrapBlazor();
builder.Services.AddScoped<IPoetryStorage, PoetryStorage>();
builder.Services.AddScoped<IPreferenceStorage, PreferenceStorage>();

builder.Services.AddScoped<INavigationService, NavigationService>();

var app = builder.Build();

// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
{
    app.UseExceptionHandler("/Error");
}


app.UseStaticFiles();

app.UseRouting();

app.MapBlazorHub();
app.MapFallbackToPage("/_Host");

app.Run();

6、页面跳转
点击 详情 按钮

在这里插入图片描述

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值