Blazor_WASM之4:路由

简介: Blazor_WASM之4:路由

Blazor_WASM之4:路由

路由模板

通过 Router组件可在 Blazor 应用中路由到 Razor 组件。 Router 组件在 Blazor 应用的 App 组件中使用。App组件模板如下

<RouterAppAssembly="@typeof(Program).Assembly">

   <FoundContext="routeData">

       <RouteViewRouteData="@routeData"DefaultLayout="@typeof(MainLayout)"/>

   </Found>

   <NotFound>

       <p>Sorry, there's nothing at this address.</p>

   </NotFound>

</Router>

在运行时,RouteView组件有两个作用:

  • 从 Router 接收 RouteData(例如/test)以及所有路由参数。
  • 使用指定的组件的布局来呈现该组件,包括任何后续嵌套布局。

组件支持使用多个 @page 指令,/blazor-route和/different-blazor-route都能跳转到该界面

@page "/blazor-route"

@page "/different-blazor-route"

<h1>Blazor routing</h1>

也可以将@page替换成@attribute

@page "/test"

@attribute [Route("test")]

重要:想要正确解析URL,必须在<head>中包含<base>,也就是在wwwroot中的index.html中<head>中包含<base>

<head>

   ...

   <basehref="/"/>

   ...

</head>

元素聚焦

切换到指定页面后,可以将UI焦点设置到指定元素。

<FocusOnNavigate RouteData="@routeData" Selector="h1" />

当 Router 组件导航到新页面时,FocusOnNavigate组件将焦点设置到页面的顶层标题 (<h1>)。

NotFound

如果找不到所请求路由的内容,则 Router组件允许应用指定自定义内容

<NotFound>

    <h1>Sorry</h1>

    <p>Sorry, there's nothing at this address.</p>

</NotFound>

路由参数

路由器使用相同的路由参数名称来填充组件参数,且路由参数不区分大小写。

@page "/test/{name}"

<h3>Test</h3>

<p>传入的参数是:@Name</p>

@code {

   [Parameter]

   public string? Name{ set;get; }

}

在地址栏中填写/test/哈哈哈

但是,如果地址栏只写/test,也就是不写参数,则会出现

改写为@page "/test/{name?}",name则变成可选参数,地址栏仍然只写/test,则会出现

路由约束

路由约束强制在路由段和组件之间进行类型匹配,例如只允许id为int类型

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

<h1>User Id: @Id</h1>

@code {

   [Parameter]

   public int Id { get; set; }

}

路由约束类型

路由约束也可以使用可选参数,比如下面的Id是必须,option是可选

@page "/user/{Id:int}/{Option:bool?}"

CatchAll路由参数

如果想把/test/a/b/c/test/后面的内容全部当做参数,则可以使用/test/{*par}来进行提取。

@page "/catch-all/{*pageRoute}"

@code {

   [Parameter]

   public string? PageRoute { get; set; }

}

查询字符串

查询字符串的样式如/test?name=tom&age=18后面的内容就是查询字符串,查询字符串支持的类型有bool, DateTime, decimal, double, float, Guid, int, long, string。使用方法如下:

@page "/test"

<h3>Test</h3>

<p>姓名:@Name</p>

<p>年龄:@Age</p>

<p>性别:@(MyProperty)</p>

@code {

   [Parameter]

   [SupplyParameterFromQuery]

   public string? Name{ set;get; }

   [Parameter]

   [SupplyParameterFromQuery]

   public int? Age { set; get; }

   [Parameter]

   [SupplyParameterFromQuery]

   public bool Gender { set; get; }

   public string MyProperty

   {

       get { return Gender?"男":"女"; }

   }  

}

在地址栏输入.../test?name=Tom&age=18&gender=true

SupplyParameterFromQuery的Name属性可以指定查询参数的名字,下面是一个将查询参数放到同一个数组的案例:

@page "/test"

<h3>Test</h3>

@foreach (var item in stars)

{

   <p>@item</p>

}

@code {

   [Parameter]

   [SupplyParameterFromQuery(Name ="star")]

   public string[]? stars { set; get; }

}

在地址栏输入.../test?star=a&star=b&star=c

相关文章
|
3月前
|
JavaScript 中间件 网络架构
Nuxt Kit 中的页面和路由管理
【9月更文挑战第16天】在 Nuxt Kit 中,页面和路由管理对于构建高效、可维护的 Web 应用至关重要。页面通常为 Vue 文件,位于 `pages` 目录下,文件名决定路由路径。支持动态路由,如 `[id]` 表示动态参数。布局文件定义整体结构,可通过 `layout` 属性指定。路由自动配置于 `nuxt.config.js`,支持 `&lt;NuxtLink&gt;` 和 `$router` 方法导航,以及路由守卫等高级功能,确保良好的用户体验和应用性能。
|
7月前
|
Web App开发 Rust 前端开发
【一起学Rust | 框架篇 | Tauri2.0框架】Tauri App开启远程调试功能
【一起学Rust | 框架篇 | Tauri2.0框架】Tauri App开启远程调试功能
609 0
|
7月前
|
前端开发 JavaScript 中间件
koa开发实践2:为koa项目添加路由模块
koa开发实践2:为koa项目添加路由模块
151 0
|
JavaScript vr&ar 开发者
ejs模板引擎使用(独立使用,没有集成 express |学习笔记
快速学习ejs模板引擎使用(独立使用,没有集成 express)
ejs模板引擎使用(独立使用,没有集成 express |学习笔记
|
前端开发 JavaScript 数据安全/隐私保护
react中ant.design框架配置动态路由
react中ant.design框架配置动态路由
226 0
|
Web App开发 存储 缓存
原生 js 实现一个前端路由 router
原生 js 实现一个前端路由 router
940 0
原生 js 实现一个前端路由 router
|
设计模式 开发框架 缓存
知道了,去卷后端 →「Nest.js 入门及实践」:)
知道了,去卷后端 →「Nest.js 入门及实践」:)
132 0
|
Dart Android开发 UED
《深入浅出Dart》Flutter路由管理
Flutter路由管理 在本篇文章中,我们将深入探讨Flutter中的路由管理,使用最新的Dart语法和Flutter框架。路由管理是构建应用程序导航和页面跳转的关键部分,它可以帮助我们实现复杂的导航结构和页面切换效果。让我们详细了解Flutter中的路由管理和一些常用的组件。
162 0
|
JavaScript 前端开发 API
Electron 中 ipcRenderer 与 ipcMain 通讯的Typescript实现
Typescript 实现 ipcRenderer 与 ipcMain 的通讯
514 0
Electron 中 ipcRenderer 与 ipcMain 通讯的Typescript实现
|
开发框架 JavaScript 前端开发