1

使用Laravel 模块

在 Laravel 8 中,我们可以使用Inertiajs加载组件

Inertia我们用app.blade.php这个初始化@inertia

app.js文件中,我们可以像这样初始化它:

const app = document.getElementById('app');

new Vue({
    render: (h) =>
        h(InertiaApp, {
            props: {
                initialPage: JSON.parse(app.dataset.page),
                resolveComponent: (name) => require(`./Pages/${name}`).default,
            },
        }),
}).$mount(app);

然后所有组件将从Pages文件夹中加载。

现在,我的问题是:

如何在模块中实现它?我想使用 Inertiajs 加载 Vuejs 组件。在模块中,这个Resources/assets/js/app.js文件是空的。如果我将上面的代码放入其中并创建一个 Pages 文件夹,但它给了我错误!

import { createApp, h } from 'vue'
import { App, plugin } from '@inertiajs/inertia-vue3'

const el = document.getElementById('app')

createApp({
  render: () => h(App, {
    initialPage: JSON.parse(el.dataset.page),
    resolveComponent: name => require(`./Pages/${name}`).default,
  })
}).use(plugin).mount(el)

在核心(我做了这个)模块中master.blade.php

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="utf-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="viewport" content="width=device-width, initial-scale=1">
        <title>Module Core</title>
       <link rel="stylesheet" href="{{ mix('css/core.css') }}">

    </head>
    <body>
        @inertia
        <script src="{{ mix('js/core.js') }}"></script>
    </body>
</html>

核心控制器:

use Inertia\Inertia;

class CoreController extends Controller
{
    public function index()
    {
        return Inertia::render('Admin/Index');
    }
}

我有一个页面assets/js/Pages/Admin/Index.vue

我想加载这个。但是给我错误:

[Vue 警告]:创建钩子时出错:“错误:找不到模块 './Admin/Index'”

4

2 回答 2

0

Laravel 不再使用assets文件夹内js的文件夹了。

resources/js/app.js所以正确的道路不应该是 Resources/assets/js/app.js

于 2021-05-26T13:01:05.793 回答
0

检查您的 Index vue 页面是否在此目录中:resources/js/Page/Admin 如果是,则复制您的 Index vue 页面中的所有内容并删除 Index vue 文件。再次重新创建文件,但这次确保您输入了带有 .vue 扩展名的文件,然后重试

于 2021-01-08T07:43:53.543 回答