首页 > 其他分享 >Laravel8配置Vue且实现SPA

Laravel8配置Vue且实现SPA

时间:2022-12-31 23:33:42浏览次数:45  
标签:npm Vue Laravel8 js vue router SPA 页面

Laravel8和Vue安装

创建新的Laravel8项目

//使用composer安装
composer create-project --prefer-dist laravel/laravel "项目名称"

//如果有Laravel安装器
laravel new "项目名称"

项目创建完毕,把Vue整合进Laravel项目

composer require laravel/ui

php artisan ui vue

安装依赖

npm install

在发生变化时编译Vue

npm run dev

Vue Router

想要做到SPA(单页面),要加一个库VueRouter

使用npm安装vue-router的时候报错的话,很有可能是因为版本问题,当前vue-router安装默认安装最新版适配Vue3,所以如果你是Vue2安装的时候需要指定版本

npm install vue-router

//Vue2
npm install vue-router@3

文件结构

resources/js目录下创建新的文件夹及文件,结构如下图:

结构

在resources/js目录下,创建了名为layouts的目录,及pages目录。

  • layouts/App.vue:页面的主组件,所有页面都在App.vue下进行切换,App.vue负责构建定义及页面组件归集。
  • pages:专门用于存放我们的子页面
  • 创建一个router.js用来储存路由

SPA(单页面实现)

修改router.js文件(在resources/router.js)

import Vue from 'vue';
import VueRouter from 'vue-router';

import Home from './pages/Home.vue';
import About from './pages/About.vue';

Vue.use(VueRouter);

const router = new VueRouter({
    mode: 'history',
    linkExactActiveClass: 'active',
    routes: [
        {
            path: '/',
            name: 'home',
            component: Home
        },
        {
            path: '/about',
            name: 'about',
            component: About
        },
    ]
});

export default router;

在此配置了路由并且还设置了两个页面,目前我们还没有这两个页面。随后我们将会创建它们。

路由准备完毕,现在我们将在布局文件App.vue中展示这些页面

<template>
    <div>
        <nav class="navbar navbar-expand-md navbar-light bg-white shadow-sm">
            <div class="collapse navbar-collapse">
                <ul class="navbar-nav">
                    <li class="nav-item">
                        <router-link class="nav-link" :to="{ name: 'home' }">Home</router-link>
                    </li>

                    <li class="nav-item">
                        <router-link class="nav-link" :to="{ name: 'about' }">About</router-link>
                    </li>
                </ul>
            </div>
        </nav>
        <div class="container">
            <router-view></router-view>
        </div>
    </div>
</template>

<script>
export default {

};
</script>

还有首页(Home)和关于(About)页面没有创建呢。打开pages目录下的Home.vue页面。

<template>
  <div class="container mt-5">
    <div class="row justify-content-center">
      <div class="col-md-8">
        <div class="card">
          <div class="card-header">About</div>
          <div class="card-body">About Page</div>
        </div>
      </div>
    </div>
  </div>
</template>

<script>
export default {

}
</script>

关于(About)的创建跟首页(Home)一样

接下来修改Vue的入口文件app.js(resources/js/app.js)

require('./bootstrap');

window.Vue = require('vue').default;

import router from './router';
import App from './layouts/App.vue';

Vue.component('example-component', require('./components/ExampleComponent.vue').default);

const app = new Vue({
    router,
    el: '#app',
    render: h => h(App)
});

以上就完成了SPA的创建,接下来就是通知Laravel了

打开routes/web.php创建入口

<?php

use Illuminate\Support\Facades\Route;

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

上述代码,我们告诉Laravel用户所有的访问都将返回resources/views/layouts/vue.blade.php文件。目前我们还没有vue.blade.php这个文件接下来就创建一下。

<!DOCTYPE html>
<html lang="{{ str_replace('_', '-', app()->getLocale()) }}">
<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>Laravel</title>
    <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css">
</head>
<body>

<div id="app"></div>
<script src="{{ asset('js/app.js') }}"></script>

</body>
</html>

这里有两个重点<div id="app"></div>将页面渲染到id为“app”的标签上,<script src="{{ asset('js/app.js') }}"></script>我们引入了编译后的VueJS文件。

这样就完成了,在去测试之前,一定确保你编译了VueJS:

npm run dev

实时编译
现在的情况是,每改动一次Vue组件就要重新执行npm run dev,这样非常麻烦;
可以使用npm run watch命令编译前端资源,每改动一次就会自动进行重新编译

然后运行服务器并在浏览器打开

php artisan serve

成品:

效果图

标签:npm,Vue,Laravel8,js,vue,router,SPA,页面
From: https://www.cnblogs.com/nojiwai/p/17017576.html

相关文章

  • 基于Java+SpringBoot+vue等疫情期间在线网课管理系统详细设计实现
    目录​​一、前言介绍:​​​​1.1背景及意义      ​​​​1.2系统运行环境​​​​二、系统设计:​​​​2.1 系统架构设计​​​​2.2角色功能图​​​​2.3 登......
  • VuePress教程
    下面全部操作都基于VuePress1.X[1]VuePress初体验创建一个文件夹,博主就创建”VuePress“进入VuePress目录执行下面命令yarninit#npminit#安装VuePressyar......
  • vue2.0和vue3.0创建项目
    ​由于vue项目依赖于nodejs,所以需要先安装它。没有nodejs去官网下载。npminstall--globalvue-cli国内npm网站很慢,可以使用淘宝镜像npminstall--registry=https://......
  • angular与vue对比
     之前一直用angular开发项目,最近使用vue开发了一个网站,还是习惯找双方的共同点,以下是在项目过程中总结的差异。 ......
  • VUE3 全局共享数据方案之一 VUEX企业级模块化设计(详细流程)
    Vue3,webpack,vite通用适用于中大型项目中1.安装vuexnpmivuex 2.创建仓库与文件结构(核心)一,创建入口在src目录下创建store文件夹,store文件夹下创建下面文件结......
  • day49-初始vue
    初始vuevue在htmlcssjs的基础上进行封装和实例化,更简单方便使用vue首先要引入vue<head><metacharset="UTF-8"><title>Title</title><!--引入vue......
  • 【小5聊】ElementUI-Vue3-TS项目简单创建
    vue2升级到vue3,不管任何框架,升级总有它改进的地方和原因,否则升级就毫无意义,技术变化日新月异,必须保持与时俱进,否则就很容易在技术的浪潮中被淘汰!vue3相比以前版本,最大一个变......
  • vue 实现遮罩层禁止滚动事件
    我们在写弹出的遮罩层时,下方的页面依然可以滚动,这时我们就要想些办法来实现了。移动端vue中提供@touchmove.prevent方法可以完美解决这个问题在蒙层所在div上加@touchmov......
  • vue项目的报错
    在Vue项目中使用props父子组件传值的时候,可能会报下面这种错误:  翻译过来的意思是:避免直接更改属性,因为每当父组件重新渲染时,该值将被覆盖。相反,使用基于属性值的数......
  • vue中具有响应的数组
    1.在vue中可以改变原数组的方法只有7个数组的方法是响应式的,其他都不是响应式的pushpopunshiftshiftsortreversesplice2.如果直接通过索引号修改数组成员,界面是......