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 数据,由您的浏览器解释。
我一直致力于构建一个简单的 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>
@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 数据,由您的浏览器解释。