【问题标题】:Using VueJS throughout entire Laravel app在整个 Laravel 应用程序中使用 VueJS
【发布时间】:2019-01-17 14:39:02
【问题描述】:

我正在尝试从我的 Laravel 项目中删除所有刀片模板,因此这包括主页。我离开了自己app.blade.php,其中包含以下内容

<!doctype html>
<html lang="{{ app()->getLocale() }}">
<head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <meta name="csrf-token" content="{{ csrf_token() }}">

    <title>My Website</title>

    <link href="/css/app.css" rel="stylesheet">
</head>
<body>
<div id="app">
    <Navigation></Navigation>
    <div class="container">
        <main>
            <router-view></router-view>
        </main>
    </div>
</div>
<script type="text/javascript" src="js/app.js"></script>
</body>
</html>

所以一个导航组件和一个路由器视图。我已经安装了路由器包。在web.php 内我有:

Route::get('/{any}', function(){
    return view('layouts.app');
})->where('any', '.*');

Navigation.vue 很简单:

<template>
    <div>
        <nav class="navbar navbar-default">
            <div class="container-fluid">
                <div class="navbar-header">
                    <router-link to="/" tag="a" class="nav-link" active-class="active" exact>
                        <i class="nav-icon fas fa-tachometer-alt"></i>
                        <p>
                            Website Name
                        </p>
                    </router-link>
                </div>
                <ul class="nav navbar-nav">
                    <router-link to="/dashboard" tag="a" class="nav-link" active-class="active" exact>
                        <i class="nav-icon fas fa-tachometer-alt"></i>
                        <p>
                            Dashboards
                        </p>
                    </router-link>
                </ul>
            </div>
        </nav>
    </div>
</template>
<script>
    export default {}
</script>

我还有几个基本组件:App.vueDashboard.vue,它们包含基本模板。然后在app.js 我有:

require('./bootstrap');

window.Vue = require('vue');

import VueRouter from 'vue-router';
Vue.use(VueRouter);

import Navigation from './components/Navigation';

let routes = [
    { path: '/', component: require('./components/App.vue').default },
    { path: '/dashboard', component: require('./components/Dashboard.vue').default }
];

const router = new VueRouter({
    mode: 'history',
    routes
});

const app = new Vue({
    el: '#app',
    components: { Navigation },
    router
});

所以当我访问我的localhost:8000 时,除了导航之外,我看到一个几乎是空白的页面,这是意料之中的。但是,当我单击链接时,即使 url 正在更改,也不会显示示例组件的内容。例如,Dashboard 组件是:

<template>
    <div>
        <main>
            <h1>This is a dashboard</h1>
        </main>
    </div>
</template>
<script>
    export default {}
</script>

我的设置中是否有任何原因导致单击导航不显示内容?

【问题讨论】:

    标签: laravel vue.js


    【解决方案1】:

    vue-loader@15 需要使用require(...).default,其中包含在laravel-mix@4 中。如果您使用的是以前版本的laravel-mix(看起来),则不应添加.default

    let routes = [
        { path: '/', component: require('./components/App.vue') },
        { path: '/dashboard', component: require('./components/Dashboard.vue') }
    ];
    

    【讨论】:

    • 您好,谢谢,这似乎有效。为什么这行得通?我遵循的许多教程都使用 .default
    • @kate_hudson 我认为您将它与动态导入混淆了:import(...).default
    • @kate_hudson 这也取决于您使用的laravel-mix 版本。在 4.0 之前它是 require(),但从 4.0 开始你应该使用 require().defaultlaravel-mix.com/docs/4.0/upgrade#importing-es-modules
    • 啊,谢谢。我正在使用最新版本,然后降级到 Laravel 5.5,因为我们的服务器没有稳定的 PHP 7.1 版本,这解释了它
    猜你喜欢
    • 1970-01-01
    • 2020-06-08
    • 2018-08-10
    • 1970-01-01
    • 2019-10-28
    • 2021-03-26
    • 2021-09-05
    • 2017-02-25
    • 2019-01-16
    相关资源
    最近更新 更多