[译]如何基于Laravel构建Vue应用(一)

使用Laravel能优雅的构建API而且与Vue单页面应用程序(SPA)完美结合。在本教程中,咱们将展现如何启动和运行Vue路由器以及用于构建SPA的Laravel后端。咱们将重点关注所需的全部部分,而后在后续教程中,咱们将进一步演示如何使用Laravel做为API层。javascript

Vue SPA如何运行的:php

  • 第一个请求命中服务器端Laravel路由器
  • Laravel渲染SPA布局
  • 后续请求利用history.pushStateAPI进行URL导航,而无需从新加载页面

Vue路由器能够配置为history模式hash模式。默认 hash 模式 —— 使用 URL 的 hash 来模拟一个完整的 URL,因而当 URL 改变时,页面不会从新加载。history 模式,这种模式充分利用 history.pushState API 来完成 URL 跳转而无须从新加载页面。html

这里咱们使用history模式,因此须要咱们须要配置一个Laravel路由,该路由将匹配全部可能的URL,具体取决于用户进入Vue SPA的路由。例如,若是用户刷新/hello路由,咱们将须要匹配该路由并返回Vue SPA应用程序模板。而后,Vue路由器将肯定路由并渲染相应的组件。前端

安装

首先,咱们建立一个新的Laravel项目,而后安装Vue路由器NPM包:vue

laravel new vue-router
cd vue-router

# Link the project if you use Valet
valet link

# Install NPM dependencies and add vue-router
yarn install
yarn add vue-router # or npm install vue-router

配置Vue路由器

这里的 <router-view> 是最顶层的出口,渲染最高级路由匹配到的组件。一样地,一个被渲染组件一样能够包含本身的嵌套 <router-view>java

<router-view></router-view>

首先,咱们将更新主要的JavaScript文件resources/assets/js/app.js并配置Vue路由器。用如下内容替换app.js文件的内容:laravel

import Vue from 'vue'
import VueRouter from 'vue-router'//导入并安装VueRouter插件

Vue.use(VueRouter)

import App from './views/App'//做为App最外层应用程序组件的组件
import Hello from './views/Hello'//导入自定义Hello组件
import Home from './views/Home'//导入自定义Home组件

//构造一个VueRouter带有配置对象的新实例
const router = new VueRouter({
    mode: 'history',
    routes: [
        {
            path: '/',
            name: 'home',
            component: Home
        },
        {
            path: '/hello',
            name: 'hello',
            component: Hello,
        },
    ],
});

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

而后咱们须要建立一些文件,但首先,咱们将介绍如下内容app.jsweb

  • 咱们导入并安装VueRouter插件Vue.use()
  • 咱们导入三个Vue组件:vue-router

    • 做为App最外层应用程序组件的组件,
    • 一个Hello映射到组件/hello
    • 一个Home映射到组件/home
  • 咱们构造一个VueRouter带有配置对象的新实例
  • 咱们App经过将组件传递给componentsVue构造函数中的属性来使Vue知道该组件
  • 咱们将router常量注入到新的Vue应用程序中以访问this.$routerthis.$route

VueRouter构造函数采用的路线,咱们定义的路径,名称(就像Laravel的命名路线),并映射到路径组件的数组。npm

我喜欢将个人路由定义移动到我导入的单独路由模块中,但为了简单起见,咱们将在主应用程序文件中定义路由。

为了使Laravel mix成功运行,咱们须要定义三个组件:

mkdir resources/assets/js/views
touch resources/assets/js/views/App.vue
touch resources/assets/js/views/Home.vue
touch resources/assets/js/views/Hello.vue

首先,该App.vue文件是咱们应用程序的最外层容器元素。在这个组件中,咱们将使用Vue Router的<router-link/>标签订义应用程序标题和一些导航:

<template>
    <div>
        <h1>Vue Router Demo App</h1>

        <p>
            <router-link :to="{ name: 'home' }">Home</router-link> |
            <router-link :to="{ name: 'hello' }">Hello World</router-link>
        </p>

        <div class="container">
            <router-view></router-view>
        </div>
    </div>
</template>
<script>
    export default {}
</script>

咱们App组件中最重要的标签是<router-view></router-view>标签,咱们的路由器将呈现与路径匹配的给定组件(即HomeHello)。

咱们须要定义的下一个组件位于resources/assets/js/views/Home.vue

<template>
  <p>This is the homepage</p>
</template>

最后,咱们定义Hello位于如下位置的组件resources/assets/js/views/Hello.vue

<template>
  <p>Hello World!</p>
</template>

我喜欢将个人可重用组件与特定于视图的组件分开,方法是将视图组织到resources/assets/js/views文件夹和我真正可重用的组件中resources/assets/js/components。这是个人惯例,我发现它运行良好,所以我能够轻松地分离哪些组件能够重用,哪些组件是特定于视图的。

就前端而言,咱们拥有运行Vue应用程序所需的一切!接下来,咱们须要定义后端路由和服务器端模板。

服务器端

咱们利用像Laravel这样的应用程序框架和Vue SPA,以便咱们能够构建服务器端API来使用咱们的应用程序。咱们还可使用Blade来渲染咱们的应用程序并经过全局JavaScript对象公开环境配置,这在我看来很方便。

在本教程中,咱们不打算构建API,但咱们将进行后续跟进。这篇文章是关于链接Vue路由器的所有内容。

咱们将在服务器端解决的第一件事是定义路由。打开routes/web.php文件并使用如下内容替换欢迎路径:

<?php

/*
|--------------------------------------------------------------------------
| Web Routes
|--------------------------------------------------------------------------
|
| Here is where you can register web routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| contains the "web" middleware group. Now create something great!
|
*/

Route::get('/{any}', 'SpaController@index')->where('any', '.*');

咱们定义了一条全能路线,SpaController这意味着任何网络路线都将映射到咱们的SPA。若是咱们没有这样作,而且用户提出了请求/hello,Laravel会回复404。

接下来,咱们须要建立SpaController并定义视图:

php artisan make:controller SpaController

打开SpaController并输入如下内容:

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class SpaController extends Controller
{
    public function index()
    {
        return view('spa');
    }
}

最后,输入如下内容resources/views/spa.blade.php

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Vue SPA Demo</title>
</head>
<body>
    <div id="app">
        <app></app>
    </div>

    <script src="{{ mix('js/app.js') }}"></script>
</body>
</html>

咱们已经定义了#app包含AppVue将呈现的组件的必需元素,以及基于URL呈现适当的组件。

运行应用程序

该基础用于构建具备Vue和Vue路由器的SPA。咱们须要构建或JavaScript来测试它:

yarn watch # or npm run watch

若是您在浏览器中加载应用程序,您应该看到以下内容:

Vue路由器Laravel演示应用程序

原文地址https://laravel-news.com/usin...

相关文章
相关标签/搜索