Laravel 8 pass data from blade to Vue 3

Viewed 2137

I try to pass data from Laravel blade to Vue with props and I get undefined in console. I tried also

<example-component :course="{{ $course }}"></example-component>
<example-component course="{{!! $course !!}}"></example-component>

index.blade.php

@extends('layouts.app')

@section('content')
    <div id="app">
    
    </div>
    
    <example-component course="{{ $course }}"></example-component>

    <script src="{{asset('js/course/app.js')}}"></script>
@endsection

app.js

import { createApp } from 'vue';
import App from './components/App.vue'
import router from '../../router'
createApp(App).use(router).mount("#app")

App.vue

<template>
{{ course }}
</template>

<script>
export default {
props: ['course'],
mounted() {
console.log(this.course)
}
}
</script>
1 Answers

The best practice is to make you component call an API to get the course.

If it's not worth an API try to pass the $course as attr to your #app element. Then you can get your course with getAttribute

<div id="app" course="{{json_encode($course)}}"></div>

in vue.js:

document.getElementById('app').getAttribute('course')
Related