fix(ssr): добавить route mixin для SSR совместимости Ziggy
- Создан RouteMixin.js для предоставления route() всем компонентам - Обновлён ssr.js с правильным импортом Router и созданием route функции - Исправлен BackButton.vue с проверкой this.route перед использованием - Добавлена обработка ошибок для route() с fallback на '#' Решает ошибку: ReferenceError: route is not defined at Proxy.resolvedLink Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
This commit is contained in:
@@ -0,0 +1,27 @@
|
||||
/**
|
||||
* SSR-safe route mixin
|
||||
* Provides the route() function to all Vue components during SSR
|
||||
*/
|
||||
|
||||
export function createRouteMixin(pageProps, RouterClass) {
|
||||
return {
|
||||
methods: {
|
||||
route(name, params = {}, absolute = false) {
|
||||
try {
|
||||
const ziggyConfig = {
|
||||
...pageProps.ziggy,
|
||||
location: pageProps.ziggy?.location
|
||||
? new URL(pageProps.ziggy.location)
|
||||
: new URL(process.env.APP_URL || 'http://localhost'),
|
||||
};
|
||||
|
||||
const router = new RouterClass(name, params, absolute, ziggyConfig);
|
||||
return router.toString();
|
||||
} catch (error) {
|
||||
console.error('Ziggy route error:', error.message);
|
||||
return '#';
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
}
|
||||
+4
-12
@@ -5,6 +5,7 @@ import { renderToString } from '@vue/server-renderer'
|
||||
import { createSSRApp, h } from 'vue'
|
||||
import { ZiggyVue } from '../../vendor/tightenco/ziggy/dist/vue.m';
|
||||
import { default as Router } from '../../vendor/tightenco/ziggy/dist/index.m.js';
|
||||
import { createRouteMixin } from './mixins/RouteMixin.js';
|
||||
|
||||
createServer(page =>
|
||||
createInertiaApp({
|
||||
@@ -33,18 +34,9 @@ createServer(page =>
|
||||
ziggyConfig.location = new URL(process.env.APP_URL || 'http://localhost');
|
||||
}
|
||||
|
||||
// Создаем функцию route с правильной конфигурацией
|
||||
const route = (name, params, absolute, config) => {
|
||||
const ziggyConfigForRoute = {
|
||||
...page.props.ziggy,
|
||||
location: ziggyConfig.location,
|
||||
};
|
||||
const router = new Router(name, params, absolute, ziggyConfigForRoute);
|
||||
return router.toString();
|
||||
};
|
||||
|
||||
// Делаем route доступным глобально
|
||||
ssrApp.config.globalProperties.route = route;
|
||||
// Добавляем route mixin для всех компонентов
|
||||
const routeMixin = createRouteMixin(page, Router);
|
||||
ssrApp.mixin(routeMixin);
|
||||
|
||||
return ssrApp
|
||||
.use(plugin)
|
||||
|
||||
Reference in New Issue
Block a user