Laravel VueJS:构建多页应用程序而不采用单页应用程序(SPA)方法

我正在尝试构建Laravel 5.5 + VueJs多页面应用程序。我不想使用SPA(单页应用程序)方法来使它看起来像是一个多页应用程序。

URL为/register的注册页面就是这种情况。使用命令php artisan make:auth,可以获得与注册相关的文件。情况是:

web.php中,我有:

Auth::routes();

app.js中,我有:

window.Vue = require('vue');
const app = new Vue({
    el: '#app',components: {
        Register: require('./components/Register.vue')
    }
});

我的layout.blade.php驻留在resources/views/文件夹中,并且具有以下内容:

    <div id="app">

                <?php
                  var_dump($component);
                ?>
                @if (isset($component))
                    <component :is={{ $component }} >
                        @endif

                        @yield('content')

                        @if (isset($component))
                    </component>
                @endif
   </div>

register.blade.php文件包含以下内容:

@extends('layout',['component' => 'Register'])

@section('content')

@endsection

Register.vue停留在resources/js/components/内并且具有以下内容:

<template>
    <div class="container">
        <div class="row">
            <div class="col-md-8 col-md-offset-2">
                <div class="panel panel-default">
                    <div class="panel-heading">Example Component</div>

                    <div class="panel-body">
                        I'm an example component!
                    </div>
                </div>
            </div>
        </div>
    </div>
</template>

<script>
    export default {
        mounted() {
            console.log('Register Component mounted.')
        }
    }
</script>

所以我预期的工作流程是:首先将调用register.blade.php,它继承了layout.blade.php并发送应该在此处呈现的Register组件作为数据。

我自己也不知道register.blade.php将如何在行的数据中将Register作为参数:

@extends('layout',['component' => 'Register'])

在查看页面源代码时,我什至看不到页面中包含app.js文件。

当然,我每次运行页面之前都要运行npm run dev命令。

问题1:上述方法有什么问题?但是正确的方法应该是什么?

编辑:

我的webpack.mix.js有:

let mix = require('laravel-mix');
    mix.js('resources/assets/js/app.js','public/js')
        .styles([

            'resources/assets/css/style.css'

        ],'public/css/style.css')
    ;

mix.options({
    extractVueStyles: 'public/css/vue-style.css'
});

EDIT2: 在页面中,我没有看到Register组件的内容。我忘了提过。

EDIT3: 问题2 :Laravel + VueJs组合不是真正意义上的MPA(多页应用程序)吗?

oyming86 回答:Laravel VueJS:构建多页应用程序而不采用单页应用程序(SPA)方法

回答您的问题并不容易,因此,我将分享我的经验。最初,我以与您相同的方式实现Vue.js:

  • 多页应用
  • 每个页面都有自己的组件
  • 每次用户移动到另一个页面时,都有可能加载新的js文件。

完全失败。最初,我只使用一个app.js文件,但是我却以一种形式加载大量无用的组件……当我只需要两个或三个组件时,为什么必须加载整个应用程序?因此,我不得不创建大量xxx-app.js文件并打破DRY原则。它不是最好的……但是它有效并且易于实现。

侧面注意:我没有使用任何类型的文件分块或其他系统,这些文件可能已消除了此类问题。我刚开始开发VueJS。也许那时我什至不知道有可能。

结构类似于:

page1.blade.php

@extends('my.layout')

@push('scripts')
    <script src="asset('page1-app.js')"></script>
@endpush

@section('content')
    <page1-component attr1="{{ $attr1 }}" [...]></page1-component>
@endsection

您会看到结构很简单:

  • 扩展所需的布局,以加载所需的CSS和其他脚本
  • scripts放入所需的Vue实例
  • 在内容部分,调用所需的组件

但是问题出在javascript部分中...我正在使用现代javascript应用程序开发的1/3功能。每天都会出现一个新问题...第一个JQuery没用...然后难以处理的SEO技术部分...然后当用户重新加载页面时Vuex存储逻辑被复制且无用...短时间内我意识到这种方法是完全错误的...

嗯,至少对于我正在开发的应用程序。因此,恕我直言,以及在许多情况下,您问题的答案

  

上述方法有什么问题?但是正确的方法应该是什么?

这取决于

如果您的应用程序很小,易于维护并且没有复杂的工作流程,那么您的解决方案就可以工作...您只需要记住:

  1. 如果您在每个页面中都包含app.js文件,但只需要1或2个组件,则文件可能会变得有些沉重。
  2. 存在很高的冗余风险。
  3. 初始组件的状态取决于赋予刀片视图的后端属性...如果出现问题,则整个应用程序都会混乱。

如果您遇到这些问题,请考虑采用完整的SPA逻辑...易于维护,您不必每天都发明一种解决方法,以此类推。

如果您的应用程序是“企业”解决方案...避免将Laravel和Vue混合在一个代码库中...拆分所有内容并将后端和前端作为两个完全独立的实体进行处理。

本文链接:https://www.f2er.com/2940357.html

大家都在问