Default javascript overschrijven in Laravel en Blade

Ik gebruik Vue.js in Laravel en heb (de standaard) een app.js als algemene Javascript file in gebruik op elke webpagina.

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

Nu wil ik bijvoorbeeld op de homepage een Vue component laten zien en niet op de andere pagina’s.
Zou hem dan kunnen registreren in de app.js maar dan zit hij ook op alle andere pagina’s van de website.

Nieuwe javascript file voor de homepage

Een andere oplossing is een Javascript bestand maken voor alleen de homepage en daar mijn Vue component registreren


window.Vue = require('vue');

Vue.component('homepage-component', require('./components/HomepageComponent.vue').default);


const homepage = new Vue({
    el: '#app'
});

Maar als je deze ook include in de pagina waar ook js/app.js staat zal je een conflict krijgen omdat

<homepage-component></homepage-component>

niet is geregisteerd is in app.js.
We moeten er dus voor zorgen dat alleen homepage.js te zien is.

Als ‘js_top’ niet bestaat laat dan de default app.js zien

In mijn app.blade heb ik het volgende tussen mijn head staan


 @hasSection('js_top')
        @yield('js_top')
    @else
        <script src="{{ asset('js/app.js') }}" defer></script>
    @endif

Als er geen sectie is meegegeven voor js_top laat hij app.js zien.

In mijn homepage blade staat het volgende op js_top mee te geven zodat homepage.js is geladen i.p.v. app.js


@section('js_top')
    <script src="{{ asset('js/homepage.js') }}" defer></script>
@endsection

Plaats een reactie