本篇只是实现了 基础 的功能,对于实际的项目中的权限等还未涉及,这些会在后期逐步完善。相关项目
laravel-vue-iview
的 GitHub 地址 戳这里,此项目基本可用于实际开发工做。php
Laravel 最新版本是 5.6,可是 5.5 是长期支持版本因此这里依旧选择使用 5.5css
# blog 是项目的名称,可自行修改 composer create-project --prefer-dist laravel/laravel blog "5.5.*"
进入刚建立的项目,执行 php artisan serve
,访问 127.0.0.1:8000 html
初次接触 Vue 的同窗,一般对于要安装什么扩展包感到迷茫。如下是 Laravel package.json
中默认的扩展包:前端
"devDependencies": { "axios": "^0.17", "bootstrap-sass": "^3.3.7", "cross-env": "^5.1", "jquery": "^3.2", "laravel-mix": "^1.0", "lodash": "^4.17.4", "vue": "^2.5.7" }
bootstrap-sass
提供 sass 编写的 bootstrap 支持,由于咱们要用 iview 因此这个扩展能够删除。 vue
直接与 Vue 相关的有 vue
和 axios
(网络请求工具),若是开发中、大型项目,vue-router
(路由管理工具) 和 vuex
(状态管理工具) 也必不可少。 node
还有其余经常使用的扩展,例如支持 cookie 操做的 js-cookie
,支持多国语言开发的 vue-i18n
,支持 Sass 语法的 node-sass
等。jquery
此项目前端使用 iview 框架,加上这些经常使用扩展后的 package.json
:ios
"devDependencies": { "axios": "^0.17", "cross-env": "^5.1", "jquery": "^3.2", "laravel-mix": "^2.0", "lodash": "^4.17.4", "node-sass": "^4.7.2", "vue": "^2.5.7" }, "dependencies": { "css-loader": "^0.28.9", "iview": "^2.9.2", "js-cookie": "^2.2.0", "less": "^3.0.0", "less-loader": "^4.0.5", "particles.js": "^2.0.0", "vue-i18n": "^7.4.2", "vue-router": "^3.0.1", "vuex": "^3.0.1" }
其中还加入了 css
加载器、less
解析工具、particles 前端动画等,不须要的能够自行删除。laravel
将以上配置直接粘贴到你的 package.json
文件中,执行 cnpm install
或者 yarn install
。git
没有 cnpm
的,须要设置淘宝镜像,npm
下载的是国外的镜像,速度慢并且可能出现下载失败的问题。
# 设置淘宝镜像命令 npm install -g cnpm --registry=https://registry.npm.taobao.org
若是想单个安装扩展,能够执行命令以下:
cnpm install vue-router --save
vue前端的文件结构在 /recources/assets/js
目录,vue可以渲染主要是两个操做
在 resource/views
新建 index.blade.php
,代码以下
<!DOCTYPE html> <html style="height: 100%"> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width,initial-scale=1,user-scalable=0"> <meta name="csrf-token" content="{{ csrf_token() }}"> <title>laravel-vue-iview项目</title> </head> <body style="height: 100%"> <div id="app"> </div> <script src="{{ mix('js/app.js') }}"></script> </body> </html>
/recources/assets/js.app.js
require('./bootstrap'); // 导入扩展包 window.Vue = require('vue'); import App from './app.vue' import VueRouter from 'vue-router'; import iView from 'iview'; import 'iview/dist/styles/iview.css'; // 导入vue Vue.use(iView); Vue.use(VueRouter); // 路由配置 const RouterConfig = { routes: [ // ExampleComponent laravel默认的示例组件 { path: '/', component: require('./components/ExampleComponent.vue') }, ] }; const router = new VueRouter(RouterConfig); const app = new Vue({ el: '#app', router: router, render: h => h(App) });
在 /recources/assets/js
新建 app.vue
, 将 iview 的 layout 代码搬过来:
<style scoped> .layout-con{ height: 100%; width: 100%; } .menu-item span{ display: inline-block; overflow: hidden; width: 69px; text-overflow: ellipsis; white-space: nowrap; vertical-align: bottom; transition: width .2s ease .2s; } .menu-item i{ transform: translateX(0px); transition: font-size .2s ease, transform .2s ease; vertical-align: middle; font-size: 16px; } .collapsed-menu span{ width: 0px; transition: width .2s ease; } .collapsed-menu i{ transform: translateX(5px); transition: font-size .2s ease .2s, transform .2s ease .2s; vertical-align: middle; font-size: 22px; } </style> <template> <div class="layout"> <Layout :style="{minHeight: '100vh'}"> <Sider collapsible :collapsed-width="78" v-model="isCollapsed"> <Menu active-name="1-2" theme="dark" width="auto" :class="menuitemClasses"> <MenuItem name="1-1"> <Icon type="ios-navigate"></Icon> <span>Option 1</span> </MenuItem> <MenuItem name="1-2"> <Icon type="search"></Icon> <span>Option 2</span> </MenuItem> <MenuItem name="1-3"> <Icon type="settings"></Icon> <span>Option 3</span> </MenuItem> </Menu> </Sider> <Layout> <Header :style="{background: '#fff', boxShadow: '0 2px 3px 2px rgba(0,0,0,.1)'}"></Header> <Content :style="{padding: '0 16px 16px'}"> <Breadcrumb :style="{margin: '16px 0'}"> <BreadcrumbItem>Home</BreadcrumbItem> <BreadcrumbItem>Components</BreadcrumbItem> <BreadcrumbItem>Layout</BreadcrumbItem> </Breadcrumb> <Card> <div style="height: 600px">Content</div> </Card> </Content> </Layout> </Layout> </div> </template> <script> export default { data () { return { isCollapsed: false }; }, computed: { menuitemClasses: function () { return [ 'menu-item', this.isCollapsed ? 'collapsed-menu' : '' ] } } } </script>
路由访问的组件会渲染到 <router-view></router-view>
, 因此咱们修改上面的 app.vue
,将 content 文字修改成 <router-view></router-view>
,上面的代码是已经修改过得。
而后修改组件 /recources/assets/js/components/ExampleComponent.vue
的内容:
<template> <Tabs> <TabPane label="macOS" icon="social-apple">标签一的内容</TabPane> <TabPane label="Windows" icon="social-windows">标签二的内容</TabPane> <TabPane label="Linux" icon="social-tux">标签三的内容</TabPane> </Tabs> </template>
在 /routes/web.php
中新建一个访问咱们挂载着vue页面的路由。
Route::get('/', function () { return view('index'); });
经常使用的编译命令以下:
# 本地环境编译 npm run dev # 本地环境编译 + 监控文件修改 npm run watch # 生产环境编译 npm run prod
这里我使用 npm run dev
,编译成功后访问项目就能够看到咱们建立的 vue 页面了。
至此,只是完成了基础的搭建过程,一个完整的项目还须要合理的 项目结构
和 基础的权限管理
等,这些内容也会逐步在此项目中完善。最终的目的是为了开发新项目时,能够 拿来就用
,而不是每次从新再配置一遍。