Используете ли вы Ajax вне компонента Vue?или внутри него как метод?
У меня есть пример того, как я динамически обновляю данные Vue из внутри самого компонента.Я не уверен, как сделать так, чтобы внешний JS обновлял компонент Vue напрямую, но мне кажется, что это хороший вариант.Я использую axios
вместо Ajax, но принцип тот же (Axios по умолчанию включен в большинство установок Laravel после 5.5).
<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>