There will be many times where you will be required to work on things that utilize both Vue and Laravel. But there are times people will ask themselves, “How am I going to transmit my data from Laravel to Vue?”
This is true for both Vue frontend apps that are strongly connected to Blade templates and single-page applications that are independent of the Laravel framework. When dealing with Vue components in Laravel blade, you must exercise caution to prevent any snags. Laravel has many other frameworks which can help every coder. This tutorial will maximize your chances of knowing how to do this portion of coding.
Pass as global JS variables: This is the easiest of all options. And it’s guaranteed to work. Furthermore, there is a useful utility package for converting PHP variables to JavaScript. However, there are occasions when one would just want to send to a single component, such as when they are using a blade to render many components at the same time. Many are also opposed to utilizing global variables since it makes it more difficult to trace down the problem.
<script>
window.posts = @json($data);
</script>
The “data” variable may then be accessed as needed in your Vue Js mount function.
new Vue({
el: ‘#app’,
mounted() {
console.log(window.posts);
}
})
Echoing into data object or component prop: The most straightforward method of transferring data from a Laravel application to a Vue frontend. You may simply echo out JSON encrypted messages to be managed to pick up by your application or its parts using one of the ways above. Extensibility seems to be an issue. So that the engines can render out your data, your JavaScript must be directly accessible in your template files. If Vue is used to add data then there might be some setbacks involved.
You can simply transfer data into props using proprietary software and Laravel’s JSON blade directives. This approach allows you to compartmentalize your Vue code by using webpack or mix to bundle your scripts while being still able to channel information into it. One can also hire Laravel developers to help them out with these tasks.
<post-comments :comments =”@json($post->comments)”></post-comments>
Injecting as a global window: While this may appear to be a little hacky, growth regulators to the properties window allow you to quickly establish global variables that can be accessed from any other module or element in your project. API retrieval has been done many times in the past using this method.
However, there is one drawback to adopting this technique, and that is how you access the information within Vue components. You won’t even be able to use something like this in your theme since Vue believes the window object you’re attempting to access is included within the same component.
The below snippet will not work
<template>
<div v-if=”window.showWindow”>
<h1>This is a Window.</h1>
</div>
</template>
Instead, if a computed method is used, this value will return.
If you’re utilizing Laravel’s mix to build your assets and your use cases for this function are tiny texts or numerical values, things may get quite easy
The below snippet will work
<template>
<div v-if=”showWindow”>
<h1>This is a Window.</h1>
</div>
</template>
<script>
export default {
computed: {
showWindow() {
return window.showWindow;
}
}
}
</script>
protected function mappingApiRoute()
{
Route::prefix(‘api’)
->middleware(‘web’)
->namespace($this->namespace)
->group(base_path(‘routes/api.php’));
}
This approach has proven to be the simplest method for me to get started with the Vue frontend and Laravel backend. The RouteServiceProvider.php file in your app’s Providers directory pulls them in and maps them. The web group’s middleware is set to the web by default, while the telecommunications group’s middleware is set to telecommunications.
Returning to app/Http/Kernel.php, you’ll see the two groups are mapped out in an array around line 30, with the web group including things like sessions, cookie encrypting, and CSRF token verification. The API group, on the other hand, just includes a basic controller and also some binds. Expert vue.js developers can also help with this problem.
It allows us to include any session parameters and tokens that our app’s standard web routes would usually use in the routes we pull in through our API. We can utilize Auth::user() and other backside routing protocols that we wouldn’t be able to perform with the default API when they are called with Axios or the other async JavaScript HTTP client.
Laravel broadcast: The Laravel data that is published from the backend may also be used. Front-end data will be sent back as JSON.
/**
* Gather data to broadcast
*
* @return array
*/
public function broadcastWith()
{
return [‘id’ => $this->user->id];
}
Bottom line
Hopefully, this tutorial will help one to understand how to pass data. It’s the most ideal way to pass data from Laravel to Vue.
Disclaimer: The article is originally present published here