使用Laravel Modules包
在Laravel 8中,我们可以使用Inertiajs加载组件
我们在app.blade.php
中用@inertia
初始化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'”
3条答案
按热度按时间wtlkbnrh1#
检查您的Index vue页是否在此目录中:resources/js/Page/Admin(如果是),请复制Index vue页面中的所有内容并删除Index vue文件。再次重新创建该文件,但这次请确保键入扩展名为.vue的文件,然后重试
j1dl9f462#
Laravel不再使用
js
文件夹中的assets
文件夹。因此,正确的路径应该是
resources/js/app.js
,而不是Resources/assets/js/app.js
lnxxn5zx3#
使用Inertia渲染函数来做一个Inertia响应。这个方法接受组件名称,并允许你传递 prop 和查看数据。