mirror of
https://github.com/nuxt/nuxt.git
synced 2024-11-27 08:02:01 +00:00
fix(vue-app): error page layout not correctly applied in client rendering (#6479)
This commit is contained in:
parent
950b48f118
commit
578d5d41f4
@ -6,6 +6,7 @@ import {
|
|||||||
globalHandleError
|
globalHandleError
|
||||||
} from './utils'
|
} from './utils'
|
||||||
<% } %>
|
<% } %>
|
||||||
|
<% if (features.layouts && components.ErrorPage) { %>import NuxtError from '<%= components.ErrorPage %>'<% } %>
|
||||||
<% if (loading) { %>import NuxtLoading from '<%= (typeof loading === "string" ? loading : "./components/nuxt-loading.vue") %>'<% } %>
|
<% if (loading) { %>import NuxtLoading from '<%= (typeof loading === "string" ? loading : "./components/nuxt-loading.vue") %>'<% } %>
|
||||||
<% if (buildIndicator) { %>import NuxtBuildIndicator from './components/nuxt-build-indicator'<% } %>
|
<% if (buildIndicator) { %>import NuxtBuildIndicator from './components/nuxt-build-indicator'<% } %>
|
||||||
<% css.forEach((c) => { %>
|
<% css.forEach((c) => { %>
|
||||||
@ -35,6 +36,15 @@ export default {
|
|||||||
render (h, props) {
|
render (h, props) {
|
||||||
<% if (loading) { %>const loadingEl = h('NuxtLoading', { ref: 'loading' })<% } %>
|
<% if (loading) { %>const loadingEl = h('NuxtLoading', { ref: 'loading' })<% } %>
|
||||||
<% if (features.layouts) { %>
|
<% if (features.layouts) { %>
|
||||||
|
<% if (components.ErrorPage) { %>
|
||||||
|
if (this.nuxt.err && NuxtError.layout) {
|
||||||
|
this.setLayout(
|
||||||
|
typeof NuxtError.layout === 'function'
|
||||||
|
? NuxtError.layout(this.context)
|
||||||
|
: NuxtError.layout
|
||||||
|
)
|
||||||
|
}
|
||||||
|
<% } %>
|
||||||
const layoutEl = h(this.layout || 'nuxt')
|
const layoutEl = h(this.layout || 'nuxt')
|
||||||
const templateEl = h('div', {
|
const templateEl = h('div', {
|
||||||
domProps: {
|
domProps: {
|
||||||
|
@ -32,6 +32,7 @@ describe('basic browser', () => {
|
|||||||
test('/squared doesnt loop due to error on error page', async () => {
|
test('/squared doesnt loop due to error on error page', async () => {
|
||||||
await page.nuxt.navigate('/squared')
|
await page.nuxt.navigate('/squared')
|
||||||
|
|
||||||
|
expect(await page.$text('header')).toBe('Error layout')
|
||||||
expect(await page.$text('h2')).toBe('An error occured while showing the error page')
|
expect(await page.$text('h2')).toBe('An error occured while showing the error page')
|
||||||
})
|
})
|
||||||
|
|
||||||
|
12
test/fixtures/error/layouts/error-layout.vue
vendored
Normal file
12
test/fixtures/error/layouts/error-layout.vue
vendored
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
<template>
|
||||||
|
<div>
|
||||||
|
<header>Error layout</header>
|
||||||
|
<nuxt />
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
export default {
|
||||||
|
name: 'ErrorLayout'
|
||||||
|
}
|
||||||
|
</script>
|
1
test/fixtures/error/layouts/error.vue
vendored
1
test/fixtures/error/layouts/error.vue
vendored
@ -11,6 +11,7 @@
|
|||||||
|
|
||||||
<script>
|
<script>
|
||||||
export default {
|
export default {
|
||||||
|
layout: 'error-layout',
|
||||||
// eslint-disable-next-line vue/require-prop-types
|
// eslint-disable-next-line vue/require-prop-types
|
||||||
props: ['error']
|
props: ['error']
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user