Vue.js 和 Laravel 传递 json 数据

Vue.js and Laravel passing json data

我一直致力于构建一个简单的 table,它从正在查询 json 数据的 mongodb 数据库获取数据,而不是需要传递的数据到前端的 vue 组件,但我无法理解 json 数据如何从 laravel 传输到 vue。要理解这里的代码是我到目前为止所做的:

api.php 路线:

Route::middleware('api')->group(function () {
Route::resource('/home', [ProductController::class,'home']);
});

web.php 路线:

Route::get('/home', [PostController::class,'home']);

PostController Home 方法:

public function home() {
    $posts = Post::paginate(4);

    return response()->json($posts);
}

主页组件:

<template>
<div>
        <table>
            <tr>
                <td>Id</td>
                <td>Title</td>
                <td>Status</td>
            </tr>
         <tr v-for="El in results" v-bind:key="El.id" >
             <td>{{El.id}}</td>
            <td>{{El.STATUS}}</td>
        </tr>
        </table>
        
</div>
</template>

<script>

export default{
     data() {
        return {
            results: []
        };
    },
    methods: {
        fetch() {
            axios.get('/api/home')
                .then(response => this.results = response.data)
                .catch(error => console.log(error));
        }
    }
}
</script>
Home.blade.php

@extends('layouts.app')
@section('content')
<div class="container">
    <div class="row justify-content-center">
         
        <div class="col-md-8">
            <div class="card">
                <div class="card-header">Data</div>
                     
                <div class="card-body">
                  <home-component></home-component>
                </div>
                 
            </div>
        </div>
    </div>
</div>
@endsection 

所有这些看起来都很好,但是当我 运行 代码时,它只显示 json 并且不呈现任何 vue 组件。感谢任何帮助。

您正在使用 /home URL 作为数据端点和 HTML 端点。你应该做的是像这样设计它:

Route: GET /api/home
Returns: JSON data
Code: `return response()->json(...);`

Route:: GET /home
Returns: HTML data with javascript that requests /api/home
Code: `return view('home');`

两个路由都是普通的 http 请求,但一个只提供 JSON 数据,另一个提供 HTML 数据,由您的浏览器解释。