【发布时间】:2022-01-13 15:06:20
【问题描述】:
目前,我通过这种方式将数据从 Laravel 传递到 Vue(通过 MySQL 数据库):
在路由/web.php 中:
Route::get('/', [MyController::class, 'index']);
在 app/Http/Controllers/MyController.php 中
public function index() {
$results = Data::all();
return view('index', compact('results'));
}
在资源/视图/index.blade.php:
<div id="app">
<index-component :results="{{ $results }}" />
</div>
然后在IndexComponent.vue中
props: {
results: {
type: Object
};
}
这很好用,但由于我的大部分 HTML 都依赖 Vue,所以感觉不自然,几乎就像一种变通方法或 hack。一定有更简单直接的方法吧?
进入 Axios:
在路由/web.php 中:
Route::view('/', 'index');
Route::get('/indexrequests', [MyController::class, 'indexRequests']);
在 app/Http/Controllers/MyController.php 中:
public function indexRequests() {
$results = Data::all();
return response()->json($results);
}
在资源/视图/index.blade.php:
<div id="app">
<index-component />
</div>
在 IndexComponent.vue 中:
created() {
this.getResults()
},
data: function() {
return {
results: null,
}
},
methods: {
getResults() {
axios
.get("/indexrequests")
.then((res) => (this.results = res.data))
.catch((error) => {});
}
}
这样,刀片视图在最初创建后可以被忽略。 getResults() 方法直接与控制器对话。
我的问题是,费用是多少?如果不使用 Blade Views 来传递数据,我会失去什么(如果有的话)?以这种方式传递的数据量或类型是否会受到限制?一种方式或另一种方式的性能会更好还是更差?有什么安全问题吗?
也许它们在底层是相同的,而我根本没有意识到这个事实?
【问题讨论】:
标签: laravel vue.js axios laravel-8 laravel-blade