路由
定義路由
首先,當我們初始化 Framework7 應用程式時,我們應該使用 routes
陣列參數傳遞預設路由
var app = new Framework7({
routes: [
{
name: 'about',
path: '/about/',
url: './pages/about.html',
},
{
name: 'news',
path: '/news/',
url: './pages/news.html',
options: {
animate: false,
},
},
{
name: 'users',
path: '/users/',
componentUrl: './pages/users.html',
options: {
props: {
users: ['John Doe', 'Vladimir Kharlampidi', 'Timo Ernst'],
},
},
on: {
pageAfterIn: function test (e, page) {
// do something after page gets into the view
},
pageInit: function (e, page) {
// do something when page initialized
},
}
},
// Default route, match to all pages (e.g. 404 page)
{
path: '(.*)',
url: './pages/404.html',
},
],
});
在應用程式初始化時定義的路由是預設路由,它們將可供應用程式中的任何檢視/路由器使用。
如果您有一個多檢視/路由器應用程式,並且您希望某些檢視/路由器擁有自己的嚴格路由,並且不希望預設路由在此檢視中可用,那麼您可以在檢視初始化時指定相同的 routes
參數
var view1 = app.views.create('.view-1', {
routes: [
{
path: '/users/',
url: './pages/users.html',
},
{
path: '/user/',
url: './pages/user.html',
},
],
});
如果您有一個多檢視/路由器應用程式,並且您希望某些檢視/路由器擁有額外路由,並且不希望這些額外路由在其他檢視中可用,那麼您可以在檢視初始化時指定 routesAdd
參數
// This view will support all global routes + own additional routes
var view2 = app.views.create('.view-2', {
// These routes are only available in this view
routesAdd: [
{
path: '/blog/',
url: './pages/blog.html',
},
{
path: '/post/',
url: './pages/post.html',
},
],
})
路由屬性
好的,現在我們將了解每個路由屬性的含義
參數 | 類型 | 說明 | |
---|---|---|---|
name | 字串 | 路由名稱,例如 home | |
path | 字串 | 路由路徑。表示當我們按一下與此路徑相符的連結時,將載入此路由,或可以使用 API 透過此路徑載入 | |
options | 物件 | 包含其他路由選項的物件(選用) | |
routes | 陣列 | 包含巢狀路由的陣列 | |
viewName | 字串 | 將強制載入此路由的檢視名稱 | |
主從結構 | |||
master | 布林值 function(app, router) | 將此路由啟用為主路由。它也可以是一個接收 app 和路由器實例的方法,在此方法中您應該傳回 true 或 false
| |
detailRoutes | 陣列 | 包含詳細路由的陣列 | |
延遲載入模組 | |||
modules | 陣列 | 包含在路由載入之前載入的延遲載入模組的陣列 | |
與內容相關的屬性 下列路由屬性定義如何(從哪裡/什麼)載入內容 | |||
content | 字串 | 從指定的內容字串建立動態頁面 | |
url | 字串 | 透過 Ajax 載入頁面內容。 也支援使用
| |
component | 物件 | 從傳遞的 Framework7 路由器元件載入頁面 | |
componentUrl | 字串 | 透過 Ajax 將頁面載入為元件 也支援從 路由路徑 使用 | |
非同步 | 函式(context) | 執行必要的非同步處理,並傳回必要的路由內容和選項。它會收到 路由回呼內容 物件作為參數。 | |
asyncComponent | 函式() | 方法應該傳回 Promise,解析為包含元件的 Component 或 ES 模組,其 它主要設計為
| |
可路由標籤 | |||
tabs | 陣列 | 包含標籤路由的陣列 | |
可路由模態視窗 | |||
actions | 物件 | 動作表單路由 | |
popup | 物件 | 快顯視窗路由 | |
loginScreen | 物件 | 登入畫面路由 | |
popover | 物件 | 浮動視窗路由 | |
sheet | 物件 | 工作表路由 | |
可路由面板 | |||
panel | 物件 | 面板路由 | |
事件 | |||
on | 物件 | 包含事件處理常式的物件 | |
別名和重新導向 | |||
alias | 字串 陣列 | 路由別名,或包含路由別名的陣列。我們需要在此處指定別名 路徑 | |
redirect | 字串 函式(context) | 路由重新導向。我們需要在此處指定重新導向 網址(非路徑)。如果為方法,則它會收到 路由回呼內容 物件作為參數。 | |
進入/離開前 | |||
beforeEnter | 函式(context) 陣列 | 函式(或函式陣列),將在路由載入/進入前執行。若要繼續路由載入,必須呼叫 resolve 。如果是 陣列 ,則必須解析陣列中的每個函式才能繼續。如果為方法,則它會收到 路由回呼內容 物件作為參數。 | |
beforeLeave | 函式(context) 陣列 | 函式(或函式陣列),將在路由卸載/離開前執行。若要繼續導覽,必須呼叫 resolve 。如果是 陣列 ,則必須解析陣列中的每個函式才能繼續。如果為方法,則它會收到 路由回呼內容 物件作為參數。 | |
keepAlive | |||
keepAlive | 布林值 | 啟用所謂的 keepAlive 路由。啟用後,載入的頁面及其元件(Vue、React 或 Router 元件)將永遠不會被銷毀。相反地,它將從 DOM 中分離,並在需要時再次重複使用。 |
以下是大多數可能選項的範例
routes: [
// Load via Ajax
{
path: '/about/',
url: './pages/about.html',
},
// Dynamic page from content
{
path: '/news/',
content: `
<div class="page">
<div class="page-content">
<div class="block">
<p>This page created dynamically</p>
</div>
</div>
</div>
`,
},
// By page name (data-name="services") presented in DOM
{
path: '/services/',
pageName: 'services',
},
// By page HTMLElement
{
path: '/contacts/',
el: document.querySelector('.page[data-name="contacts"]'),
},
// By component
{
path: '/posts/',
component: {
// look below
},
},
// By component url
{
path: '/post/:id/',
componentUrl: './pages/component.html',
},
// Async
{
path: '/something/',
async: function ({ app, to, resolve }) {
// Requested route
console.log(to);
// Get external data and return page content
fetch('http://some-endpoint/')
.then((res) => res.json())
.then(function (data) {
resolve(
// How and what to load
{
content: `<div class="page">${data.users}</div>`
},
);
});
}
}
],
路由路徑
如上所述,路由的 path
屬性表示將在瀏覽器視窗網址列中顯示的路徑/網址(如果啟用 browserHistory
),當透過 API 或按一下具有相同路徑的連結載入下列路由時。
也支援動態路徑。因此,如果您的路由中有下列路徑 /blog/users/:userId/posts/:postId/
,並按一下網址為 /blog/users/12/posts/25
的連結,則在載入的頁面上,我們可以存取包含 { userId: 12, postId: 25 }
的 route.params
物件
路由路徑比對由 Path To Regexp 函式庫處理,因此 Framework7 也支援該函式庫支援的所有內容。例如,如果您要新增符合所有路徑的預設路由,我們可以使用正規表示式,例如
// Default route, match to all pages (e.g. 404 page)
{
path: '(.*)',
url: './pages/404.html',
},
路由選項
讓我們來看看可以在 options
屬性中傳遞的其他路由選項
參數 | 類型 | 說明 |
---|---|---|
animate | 布林值 | 頁面是否應有動畫(覆寫預設路由器設定) |
history | 布林值 | 頁面是否應儲存在路由器歷程記錄中 |
browserHistory | 布林值 | 頁面是否應儲存在瀏覽器狀態中。如果您正在使用 browserHistory ,則可以在這裡傳遞 false 以防止路由進入瀏覽器歷程記錄 |
reloadCurrent | 布林值 | 使用路由中的新頁面取代當前頁面,此情況下沒有動畫 |
reloadPrevious | 布林值 | 使用路由中的新頁面取代歷程記錄中的前一頁 |
reloadAll | 布林值 | 載入新頁面,並從歷程記錄和 DOM 中移除所有前一頁 |
clearPreviousHistory | 布林值 | 重新載入/導航至指定路由後,將清除前一頁的歷程記錄 |
ignoreCache | 布林值 | 如果設為 true ,則會忽略快取中是否有此類 URL,並再次使用 XHR 重新載入 |
force | 布林值 | 如果設為 true ,則會忽略歷程記錄中的前一頁,並載入指定的頁面 |
props | 物件 | 將作為 Vue/React 頁面元件屬性傳遞的屬性 |
transition | 字串 | 自訂頁面轉場名稱 |
openIn | 字串 | 允許將頁面路由開啟為模式或面板。因此,它可以是下列其中之一:popup 、popover 、loginScreen 、sheet 、panel |
路由回呼內容
async
、redirect
、beforeEnter
和 beforeLeave
路由屬性中使用的路由內容回呼的格式
屬性 | |
---|---|
app | 連結至全域應用程式執行個體 |
to | 要求的路由 |
from | 目前作用中的路由 |
router | 目前的路由器執行個體 |
resolve | 呼叫以解析/繼續路由的方法 |
reject | 呼叫以防止/拒絕路由的方法 |
direction | 導航方向,可以是 forward 或 backward |
非同步路由
async
路由屬性是一個非常強大的工具,用於傳回動態路由屬性。它是一個具有下列參數的函式
async(context)
- context - 路由回呼內容
路由回呼的resolve
方法有以下格式
resolve(parameters, options)
- parameters object - 包含已解析路由內容的物件。必須包含下列其中一個屬性:
url
、content
、component
或componentUrl
- options object - 包含路由選項的物件
reject
回呼函式沒有參數
reject()
請注意,在非同步方法中呼叫resolve
或reject
之前,路由會被封鎖!
例如
routes = [
{
path: '/foo/',
async({ resolve, reject }) {
if (userIsLoggedIn) {
resolve({ url: 'secured.html' })
} else {
resolve({ url: 'login.html' })
}
}
}
]
路由事件
可以使用路由的on
屬性,為此頁面中的所有頁面事件新增路由。例如
var app = new Framework7({
routes: [
// ...
{
path: '/users/',
url: './pages/users.html',
on: {
pageBeforeIn: function (event, page) {
// do something before page gets into the view
},
pageAfterIn: function (event, page) {
// do something after page gets into the view
},
pageInit: function (event, page) {
// do something when page initialized
},
pageBeforeRemove: function (event, page) {
// do something before page gets removed from DOM
},
}
},
// ...
],
});
請注意,此類路由事件實際上是 DOM 事件,因此每個此類處理常式會接受event
作為第一個參數(包含事件本身)和page
作為第二個參數(包含頁面資料)。
此外,此類事件處理常式的內容(this
)會指向相關的路由器執行個體。
巢狀路由
也可以有巢狀路由(路由中的路由)
routes = [
{
path: '/faq/',
url: './pages/faq.html',
},
{
path: '/catalog/',
url: './pages/catalog.html',
routes: [
{
path: 'computers/',
url: './pages/computers.html',
},
{
path: 'monitors/',
url: './pages/monitors.html',
},
...
],
}
];
這是什麼意思?為了更了解,實際上(在幕後)此類路由會合併到下列路由中
routes = [
{
path: '/faq/',
url: './pages/faq.html',
},
{
path: '/catalog/',
url: './pages/catalog.html',
}
{
path: '/catalog/computers/',
url: './pages/computers.html',
},
{
path: '/catalog/monitors/',
url: './pages/monitors.html',
},
];
因此,假設我們在/catalog/
頁面中,並有下列連結
<a href="computers/">Computers</a>
- 會如預期般運作。連結會與目前的路由合併(/catalog/
+computers/
),我們會得到路由中已有的/catalog/computers/
。<a href="./computers/">Computers</a>
- 會與案例 1 相同,因為路徑開頭的./
表示相同子層級。<a href="/catalog/computers/">Computers</a>
- 也會與案例 1 相同,因為開頭的/
(斜線)表示根目錄。而我們在合併的路由中也有此根目錄路由。<a href="/computers/">Computers</a>
- 不會如預期般運作,因為開頭的/
(斜線)表示根目錄。而我們的路由中沒有此類/computers/
根目錄路由。
詳細路由
對於主從檢視,除了主路由上的master: true
之外,也可以指定detailRoutes
。
當指定 detailRoutes
時,導覽至詳細路由也會預先載入其主路由。
但與巢狀路由(在 routes
參數中指定)不同,詳細路由的 path
不會與主路由的 path
合併。
routes = [
{
path: '/blog/',
url: './news.html',
master: true,
detailRoutes: [
{
/* We need to specify detail route path from root */
path: '/blog/:postId/',
url: './post.html',
},
],
},
// ...
]
可路由標籤
可路由標籤是什麼意思?為什麼它很好?
- 首先,它提供了透過一般連結導覽至標籤的機會,而不是所謂的特殊標籤連結。
- 其次,當導覽至此類路由時,您可以載入已開啟所需標籤的頁面。
- 第三,在啟用瀏覽器記錄的狀況下,當您在記錄中向前或向後導覽時,會開啟相同的標籤。
- 最後但並非最不重要的一點,在使用可路由標籤時,您可以使用與頁面相同的方式載入標籤內容,例如使用
url
、content
、component
或componentUrl
首先,我們需要在應用程式路由中指定標籤路由。假設我們在 /tabs/ 路由上有一個具有可路由標籤的頁面
routes = [
{
path: '/about-me/',
url: './pages/about-me/index.html',
// Pass "tabs" property to route
tabs: [
// First (default) tab has the same url as the page itself
{
path: '/',
id: 'about',
// Fill this tab content from content string
content: `
<div class="block">
<h3>About Me</h3>
<p>...</p>
</div>
`
},
// Second tab
{
path: '/contacts/',
id: 'contacts',
// Fill this tab content via Ajax request
url: './pages/about-me/contacts.html',
},
// Third tab
{
path: '/cv/',
id: 'cv',
// Load this tab content as a component via Ajax request
componentUrl: './pages/about-me/cv.html',
},
],
}
]
例如,在 /about-me/
頁面上,我們可能有以下結構
<div class="page">
<div class="navbar">
<div class="navbar-bg"></div>
<div class="navbar-inner">
<div class="title">About Me</div>
</div>
</div>
<div class="toolbar tabbar toolbar-bottom">
<div class="toolbar-inner">
<a href="./" class="tab-link" data-route-tab-id="about">About</a>
<a href="./contacts/" class="tab-link" data-route-tab-id="contacts">>Contacts</a>
<a href="./cv/" class="tab-link" data-route-tab-id="cv">>CV</a>
</div>
</div>
<div class="tabs tabs-routable">
<div class="tab page-content" id="about"></div>
<div class="tab page-content" id="contacts"></div>
<div class="tab page-content" id="cv"></div>
</div>
</div>
與一般 標籤 幾乎相同,但不同之處在於標籤連結和標籤上不再有 tab-link-active
和 tab-active
類別。這些類別和標籤將由路由器切換。此外,還有一個新的 data-route-tab-id
屬性,標籤切換器需要它來了解與所選路由相關的連結。
您可以在 標籤 元件頁面的相關區段中進一步了解可路由標籤及其額外事件。
可路由模態視窗
模態視窗也可以路由。這裡的模態視窗是指以下元件:彈出視窗、浮動提示、動作表、登入畫面、表單模態視窗。彈出視窗和登入畫面可能在此處有更多使用案例。
與可路由標籤和頁面具有相同的功能
- 它提供了透過一般連結開啟模態視窗的機會,而不是所謂的特殊連結或 API,
- 在啟用瀏覽器記錄的狀況下,當您重新整理瀏覽器、在記錄中向前或向後導覽時,會開啟相同的模態視窗,
- 使用可路由的模態視窗,您可以載入模態視窗本身及其內容,其方式與載入頁面相同,亦即使用
url
、content
、component
或componentUrl
routes = [
...
// Creates popup from passed HTML string
{
path: '/popup-content/',
popup: {
content: `
<div class="popup">
<div class="view">
<div class="page">
...
</div>
</div>
</div>
`
}
},
// Load Login Screen from file via Ajax
{
path: '/login-screen-ajax/',
loginScreen: {
url: './login-screen.html',
/* login-screen.html contains:
<div class="login-screen">
<div class="view">
<div class="page">
...
</div>
</div>
</div>
*/
},
},
// Load Popup from component file
{
path: '/popup-component/',
loginScreen: {
componentUrl: './popup-component.html',
/* popup-component.html contains:
<template>
<div class="popup-screen">
<div class="view">
<div class="page">
...
</div>
</div>
</div>
</template>
<style>...</style>
<script>...</script>
*/
},
},
// Use async route to check if the user is logged in:
{
path: '/secured-content/',
async({ resolve }) {
if (userIsLoggedIn) {
resolve({
url: 'secured-page.html',
});
} else {
resolve({
loginScreen: {
url: 'login-screen.html'
} ,
});
}
},
}
]
根據上述範例
- 當您按一下具有
/popup-content/
href 屬性的連結時,它會從指定的字串內容開啟快顯視窗, - 當您按一下具有
/login-screen-ajax/
href 屬性的連結時,它會對login-screen.html
檔案執行 Ajax 要求,並將其開啟為登入畫面, - 當您按一下具有
/popup-component/
href 屬性的連結時,它會對popup-component.html
檔案執行 Ajax 要求,將其剖析為路由元件,並將其開啟為快顯視窗, - 當您按一下具有
/secured-content/
href 屬性的連結時,如果使用者已登入,它會從secured-page.html
載入頁面,如果使用者未登入,它會從login-screen.html
檔案開啟登入畫面。
可路由面板
可路由面板自 Framework7 版本 3.2.0 起提供。
面板(側面板)也可以使用與可路由模態視窗和頁面相同的特色進行路由
- 它提供機會讓您透過一般連結開啟面板,而非所謂的特殊連結或 API,
- 在已啟用瀏覽器記錄的情況下,當您重新整理瀏覽器、在記錄中向前或向後瀏覽時,會開啟相同的面板,
- 使用可路由面板,您可以載入面板本身及其內容,其方式與載入頁面和模態視窗相同,亦即使用
url
、content
、component
或componentUrl
routes = [
...
// Creates Panel from passed HTML string
{
path: '/left-panel/',
panel: {
content: `
<div class="panel panel-left panel-cover">
<div class="view">
<div class="page">
...
</div>
</div>
</div>
`
}
},
// Load Panel from file via Ajax
{
path: '/right-panel-ajax/',
panel: {
url: './right-panel.html',
/* right-panel.html contains:
<div class="panel panel-right panel-reveal">
<div class="view">
<div class="page">
...
</div>
</div>
</div>
*/
},
},
// Load Panel from component file
{
path: '/panel-component/',
panel: {
componentUrl: './panel-component.html',
/* panel-component.html contains:
<template>
<div class="panel panel-left panel-cover">
<div class="view">
<div class="page">
...
</div>
</div>
</div>
</template>
<style>...</style>
<script>...</script>
*/
},
},
]
根據上述範例
- 當您按一下具有
/left-panel/
href 屬性的連結時,它會從指定的字串內容開啟面板, - 當您按一下具有
/right-panel-ajax/
href 屬性的連結時,它會對right-panel.html
檔案執行 Ajax 要求,並將其開啟為右面板, - 當您按一下具有
/panel-component/
href 屬性的連結時,它會對panel-component.html
檔案執行 Ajax 要求,將其剖析為路由元件,並將其開啟為面板,
請注意,可路由面板無法與靜態面板混合使用。因此,如果您的應用程式中有靜態左面板,則只有右面板可以載入為可路由面板。
輸入/離開前路由
如果您需要在載入(輸入)和卸載(離開)路由之前進行額外的檢查、執行額外的動作或載入/傳送某些內容,beforeEnter
和 beforeLeave
路由掛鉤會非常有用。它可以是單一方法或要執行的多個方法陣列。例如
routes = [
{
path: 'profile',
url: 'profile.html',
beforeEnter: function ({ resolve, reject }) {
if (/* some condition to check user is logged in */) {
resolve();
} else {
// don't allow to visit this page for unauthenticated users
reject();
}
},
},
{
path: 'profile-edit',
url: 'profile-edit.html',
beforeLeave: function ({ resolve, reject }) {
if (/* user didn't save edited form */) {
app.dialog.confirm(
'Are you sure you want to leave this page without saving data?',
function () {
// proceed navigation
resolve();
},
function () {
// stay on page
reject();
}
)
} else {
resolve();
}
}
}
]
當然,當傳遞為函式陣列時,支援多個掛鉤
function checkAuth({ to, from, resolve, reject }) {
if (/* some condition to check user is logged in */) {
resolve();
} else {
reject();
}
}
function checkPermission({ to, from, resolve, reject }) {
if (/* some condition to check user edit permission */) {
resolve();
} else {
reject();
}
}
routes = [
{
path: '/profile/',
url: 'profile.html',
// check if the user is logged in
beforeEnter: checkAuth,
},
{
path: '/profile-edit/',
url: 'profile-edit.html',
// check if the user is logged in and has required permission
beforeEnter: [checkAuth, checkPermission],
}
]
請注意,如果使用 component
屬性載入頁面,beforeEnter
將無法正常運作,在這種情況下,您應該使用 async
或 asyncComponent
屬性,以便在觸發 beforeEnter
之後動態載入頁面
重新導向和別名
別名
我們可以使用路由的alias
屬性傳遞路由別名。在此情況下,別名基本上表示同一路由可以有多個存取的路徑
routes = [
{
path: '/foo/',
url: 'somepage.html',
alias: '/bar/',
},
{
path: '/foo2/',
url: 'anotherpage.html',
alias: ['/bar2/', '/baz/', '/baz2/'],
}
]
根據以上範例
- 如果我們透過
/foo/
或/bar/
URL要求頁面,第一個路由將會匹配,而我們會取得從somepage.html
載入的頁面 - 如果我們透過
/foo2/
、/bar2/
、/baz/
、/baz2/
URL要求頁面,第二個路由將會匹配,而我們會取得從anotherpage.html
載入的頁面
重新導向
我們可以使用redirect
屬性傳遞路由重新導向
- 如果我們傳遞
redirect
作為字串
,我們必須在此傳遞直接重新導向的URL - 如果我們傳遞
redirect
作為函式
,我們需要使用重新導向的URL呼叫函式的解析參數
例如
routes = [
{
path: '/foo/',
url: 'somepage.html',
},
{
path: '/bar/',
redirect: '/foo/',
},
{
path: '/baz/',
redirect: function ({to, resolve, reject}) {
// if we have "user" query parameter
if (to.query.user) {
// redirect to such url
resolve('/foo/?user=' + to.query.user);
}
// otherwise do nothing
else reject();
}
}
]
上述範例表示
- 當我們要求
/bar/
URL時,路由器將會重新導向到/foo/
URL,然後搜尋與此新URL匹配的路由。在此情況下,它將會匹配到路徑為/foo/
的第一個路由,並從somepage.html
載入頁面 - 當我們要求
/baz/?user=john
時,我們將會重新導向到/foo/?user=john
URL,這將會匹配到第一個路由 - 當我們要求
/baz/
(沒有查詢)時,不會發生任何事
請注意,在重新導向中,我們傳遞的是URL,而不是像別名那樣的路由路徑
保持活動狀態
keepAlive路由在Framework7 3.6.0版本中提供。
當keepAlive
啟用時,路由載入此類頁面後,頁面和(如果適用)其元件(Vue、React或路由元件)將永遠不會被銷毀。相反,它將從DOM中分離,並在需要時再次重複使用。
對於不太常更新的「繁重」頁面,啟用此功能會很有用。例如,包含地圖、繁重畫布或其他運算的頁面。使用一般的邏輯,每次瀏覽此頁面時,所有這些繁重的運算都會發生。但使用keepAlive,它將只會執行一次,而在所有後續瀏覽中,路由器將重複使用已呈現的頁面DOM元素。
如果您真的需要保留頁面狀態,這也可能很有用。啟用keepAlive後,下次載入頁面時,所有DOM修改和表單元素狀態都將被保留。
但有些事情需要注意
- 它不支援
async
路由 - 僅支援頁面(不支援面板和對話框)
- 如果您有動態路由路徑(例如
/some-page/:foo/:bar
)或依賴頁面路由查詢(?foo=bar
),則查詢和路由參數在初始載入後不會變更。 page:beforeremove
、pageBeforeRemove
頁面事件永遠不會針對此類頁面觸發- 如果您將其用作 Vue 元件,則
beforeDestroy
、destroyed
掛鉤永遠不會針對此類元件觸發。created
、mounted
掛鉤只會觸發一次。 - 如果您將其用作 React 元件,則
componentWillUnmount
方法永遠不會針對此類元件觸發。componentWillMount
、componentDidMount
方法只會觸發一次。 - 如果您將其用作 F7 的路由器元件,則
beforeDestroy
、destroyed
掛鉤永遠不會針對此類元件觸發。created
、mounted
掛鉤只會觸發一次。
為避免元件和頁面生命週期的陷阱,建議依賴下列頁面事件
page:mounted
- 當其 DOM 元素附加或重新附加時,將始終針對 keepAlive 路由頁面呼叫。page:beforeunmount
- 當其 DOM 元素即將從 DOM 分離時,將始終針對 keepAlive 路由頁面呼叫。
要建立 keepAlive 路由,我們只需將 keepAlive: true
傳遞給其參數
import SomPageComponent from './some-page.js';
var routes = [
/* Usual route */
{
path: '/',
url: './pages/home.html',
},
/* Alive route. Will be loaded from file first time, and then will reuse rendered DOM element */
{
path: '/map/',
url: './pages/map.html',
keepAlive: true,
},
/* Alive route. Will be created as component, and then will reuse rendered DOM element */
{
path: '/some-page/',
component: SomPageComponent,
keepAlive: true,
},
];