vue-page-stack currently targets Vue 3. For the Vue 2 version, see v1.5.0.
English | 简体中文
A Vue 3 SPA navigation stack that preserves route state in stack order, so back navigation feels closer to a native app than a full page remount.
- Works on top of
vue-routerwithout changing your route definitions - Stores newly rendered pages on
pushandforward - Restores previous pages from the stack on
backandgo(-n)so local UI state can survive - Removes unreachable pages from the stack after back navigation
- Replaces the current stack entry on
replace - Emits
backandforwardevents for direction-aware transitions - Supports browser back and forward buttons
VuePageStackmanages pages in navigation order instead of providinginclude,exclude, ormaxKeepAlivekeeps previously cached pages around until they are evicted;VuePageStacktrims pages that are no longer reachable in the stack- Navigating to the same route again creates a fresh page, while returning to an earlier page restores its cached instance
pnpm install vue-page-stackimport { createApp } from 'vue';
import { VuePageStackPlugin } from 'vue-page-stack';
const app = createApp(App);
app.use(VuePageStackPlugin, { router });<template>
<router-view v-slot="{ Component }">
<vue-page-stack @back="onBack" @forward="onForward">
<component :is="Component" :key="$route.fullPath" />
</vue-page-stack>
</router-view>
</template>
<script setup>
const onBack = () => {
console.log('back');
};
const onForward = () => {
console.log('forward');
};
</script>Use a stable route key on the rendered route component. In most apps, $route.fullPath is the safest default because it treats different params and query strings as distinct stack entries.
Use app.use to install vue-page-stack.
import { VuePageStackPlugin } from 'vue-page-stack';
//...
app.use(VuePageStackPlugin, { router });Options:
| Attribute | Description | Type | Accepted Values | Default |
|---|---|---|---|---|
router |
vue-router instance |
Router |
router created by createRouter |
required |
Use the back and forward events to react to navigation direction changes.
<vue-page-stack @back="onBack" @forward="onForward">
<component :is="Component" :key="$route.fullPath" />
</vue-page-stack>- The default slot should render a single route component vnode for stack behavior to apply
- Multiple slot children are passed through unchanged
- The implementation depends on Vue renderer internals, so upgrades should be validated with the test suite
pnpm install
pnpm run build
pnpm run lint
pnpm run test:run
pnpm run test:coveragedist/ is treated as a release artifact and is generated automatically by npm pack / npm publish through the prepack script, so it does not need to stay checked in during normal development.
- Architecture and maintenance notes: docs/ARCHITECTURE.md
Release-by-release changes are documented in the release notes.
The page instance management model is inspired by Vue's KeepAlive implementation.
This plugin draws on both vue-navigation and vue-nav. Thanks for the inspiration.
Thanks goes to these wonderful people (emoji key):
hezf 🎨 |
李娜 📖 |
余小磊 💻 |
yellowbeee 💻 |
