When I use defer on app.js, there is a js plugin not working properly.
If I remove defer, although the plugin works, but there is a warning to ask me to use defer, and I don’t know what to do.
// resource/js/app.js
require('./bootstrap');
import Alpine from 'alpinejs';
import mask from '@alpinejs/mask'
Alpine.plugin(mask);
window.Alpine = Alpine;
Alpine.start();
// webpack.mix.js
mix.js('resources/js/app.js', 'public/js').postCss('resources/css/app.css', 'public/css', [
require('tailwindcss'),
require('autoprefixer'),
]);
This is the test.blade.php
<!DOCTYPE html>
<head>
<meta charset="utf-8">
<title>title</title>
<link rel="stylesheet" href="{{ asset('css/app.css') }}">
<livewire:styles />
<livewire:scripts />
<script src="{{ asset('js/app.js') }}" defer></script>
</head>
<body>
<input x-mask="99/99/9999" placeholder="MM/DD/YYYY">
</body>
</html>
If I use <script src="{{ asset('js/app.js') }}" defer></script>
, then the x-mask
plugin will not working.
If I remove defer and use <script src="{{ asset('js/app.js') }}" ></script>
, the x-mask
works, but there is a warning Alpine Warning: Unable to initialize. Trying to load Alpine before
is available. Did you forget to add
deferin Alpine's
tag?
on the chrome browser console.
What should I do? Any suggestion? Thank you!
Advertisement
Answer
Thanks to @Dauros, it works after I put an x-data
directive to a parent element. (I also put the defer
to the app.js)
<div x-data="{ date: '' }">
<input x-mask="99/99/9999" placeholder="MM/DD/YYYY" x-model="date">
</div>
<script src="{{ asset('js/app.js') }}" defer></script>
It doesn’t mention on the alpineJS x-mask plugin page.
And I finally understand what the document said about the x-data
in the Start Here and x-data.
Everything in Alpine starts with the x-data directive.
Everything in Alpine starts with an x-data directive. Inside of x-data, in plain JavaScript, you declare an object of data that Alpine will track.