跳至主要内容
版本:v8

ion-route

路由组件接受一个组件,并在浏览器 URL 与 url 属性匹配时渲染它。

注意

注意:此组件仅应与普通和 Stencil JavaScript 项目一起使用。对于 Angular 项目,请使用 ion-router-outlet 和 Angular 路由器。

导航钩子可用于执行任务或充当导航守卫。钩子通过向每个 ion-route 上的 beforeEnterbeforeLeave 属性提供函数来使用。返回 true 允许导航继续,而返回 false 会导致它被取消。返回类型为 NavigationHookOptions 的对象允许您将导航重定向到另一个页面。

接口

interface NavigationHookOptions {
/**
* A valid path to redirect navigation to.
*/
redirect: string;
}

用法

<ion-router>
<ion-route url="/home" component="page-home"></ion-route>
<ion-route url="/dashboard" component="page-dashboard"></ion-route>
<ion-route url="/new-message" component="page-new-message"></ion-route>
<ion-route url="/login" component="page-login"></ion-route>
</ion-router>
const dashboardPage = document.querySelector('ion-route[url="/dashboard"]');
dashboardPage.beforeEnter = isLoggedInGuard;

const newMessagePage = document.querySelector('ion-route[url="/dashboard"]');
newMessagePage.beforeLeave = hasUnsavedDataGuard;

const isLoggedInGuard = async () => {
const isLoggedIn = await UserData.isLoggedIn(); // Replace this with actual login validation

if (isLoggedIn) {
return true;
} else {
return { redirect: '/login' }; // If a user is not logged in, they will be redirected to the /login page
}
}

const hasUnsavedDataGuard = async () => {
const hasUnsavedData = await checkData(); // Replace this with actual validation

if (hasUnsavedData) {
return await confirmDiscardChanges();
} else {
return true;
}
}

const confirmDiscardChanges = async () => {
const alert = document.createElement('ion-alert');
alert.header = 'Discard Unsaved Changes?';
alert.message = 'Are you sure you want to leave? Any unsaved changed will be lost.';
alert.buttons = [
{
text: 'Cancel',
role: 'Cancel',
},
{
text: 'Discard',
role: 'destructive',
}
];

document.body.appendChild(alert);

await alert.present();

const { role } = await alert.onDidDismiss();

return (role === 'Cancel') ? false : true;
}

属性

beforeEnter

描述当路由尝试进入时触发的导航钩子。返回 true 允许导航继续,而返回 false 会导致它被取消。返回 NavigationHookOptions 对象会导致路由器重定向到指定的路径。
属性未定义
类型(() => NavigationHookResult | Promise<NavigationHookResult>) | undefined
默认值未定义

beforeLeave

描述当路由尝试离开时触发的导航钩子。返回 true 允许导航继续,而返回 false 会导致它被取消。返回 NavigationHookOptions 对象会导致路由器重定向到指定的路径。
属性未定义
类型(() => NavigationHookResult | Promise<NavigationHookResult>) | undefined
默认值未定义

component

描述当路由匹配时,在导航出口 (ion-tabsion-nav) 中加载/选择的组件的名称。

此属性的值并不总是要加载的组件的标签名,在 ion-tabs 中,它实际上是指要选择的 ion-tab 的名称。
属性component
类型字符串
默认值未定义

componentProps

描述一个包含要传递给定义的组件的 props 的键值 { 'red': true, 'blue': 'white'},在渲染时。
属性未定义
类型未定义 | { [key: string]: any; }
默认值未定义

url

描述为了使此路由生效,需要匹配的相对路径。

接受类似于 expressjs 的路径,以便您可以在 url 中定义参数 /foo/:bar其中 bar 将在传入 props 中可用。
属性url
类型字符串
默认值''

事件

名称描述冒泡
ionRouteDataChangedion-router 内部使用,以了解此路由何时发生了变化。true

方法

此组件没有公开方法。

CSS 阴影部分

此组件没有 CSS 阴影部分。

CSS 自定义属性

此组件没有 CSS 自定义属性。

插槽

此组件没有插槽。