您是否在 Vue 组件外部使用 Ajax?还是在其中作为一种方法?
我有一个示例,说明如何从组件本身的内部动态更新 Vue 数据。我不确定如何让外部 JS 直接更新 Vue 组件,但我觉得这是一个不错的选择。我使用的是axios 而不是 Ajax,但原理是一样的(大多数 Laravel 5.5 之后的安装中默认包含 Axios)。
<template>
<div>
<div id="reports">
<!-- Display data -->
{{ reports }}
</div>
<button @click="refreshReports">Refresh</button>
</div>
</template>
<script>
export default {
data() {
return {
endpoint: '/api/MY_ROUTE/'
};
},
props: {
reports: Object
},
methods: {
// Make Axios call to API endpoint
refreshReports() {
// GET version
axios.get(this.endpoint)
.then(({data}) => {
this.reports = data.data;
});
// POST version
axios.post(this.endpoint, {
KEY: 'VALUE',
}).then(({data}) => {
this.reports = data.data;
});
/*
`data.data` assumes the returned response is a JSON Resource
if it's not returning the correct data, put a `console.log(data)` and see how it's getting returned!
*/
}
}
};
</script>
在您的 routes/api.php 文件中,您有这样一条路线:
// GET version
Route::get('MY_ROUTE', 'ReportController@getReports');
// POST version
Route::post('MY_ROUTE', 'ReportController@getReports');
你的控制器会有这样的方法:
// app/Http/Controllers/ReportController
public function getReports(Request $request) {
return Reports::all();
}
这有意义吗?
更新:
我不知道如何让外部 JS 直接更新 Vue 组件
我知道您可以导入外部 JS 脚本并在方法中使用它们的功能,但我以前从未这样做过。
类似:
<script>
import { myFunction } from '../external.js'
export default {
methods: {
refreshReports() {
// I have no idea if this is the correct way to do it, just a guess!
this.reports = myFunction();
}
}
};
</script>