许多laravel/vue教程使用ajax调用来获取数据。似乎SPA与Laravel完全隔离。也就是说,Laravel只是一个数据API,vue应用程序也可以简单地托管在第三方外部服务器上(例如AWS S3)。这是推荐的方式吗?还是我应该使用Laravel进行路由,并拥有实现各个组件和已包含数据的单独视图,而不是使用SPA呢?
对于单页应用程序(SPA),我建议采用标准设置,即在Web服务器上使用Laravel,在浏览器中使用Vue。为此,请安装Laravel和Vue。从浏览器到服务器的AJAX通信是通过Vue附带的Axios库完成的。以下是安装Laravel和Vue路由器的方法:
composer require laravel/ui
php artisan ui vue
npm install && npm run dev
npm install vue-router
npm run watch
在Vue组件内部,使用Axios与服务器通信的代码如下所示。此外,在以下代码中,端点在Laravel > Routes > web.php中定义:
methods: {
fetchMessages() {
let endpoint = `/channels/${this.activeChannel}/messages`;
axios.get(endpoint).then(resp => {
this.messages = resp.data.messages;
});
},
Vue路由器在主JS文件中声明。例如,在app.js中。
以下是Vue路由器的样子,其他URL路径将添加在“routes”下:
import Vue from 'vue'
import VueRouter from 'vue-router'
Vue.use(VueRouter)
const router = new VueRouter({
base: '/',
mode: 'history',
history: true,
routes: [
{
path: '/',
name: 'home',
component: PostComponent
},
],
});