Описание
Мне нужна четкая структура моего JS кода в приложении Laravel. В данный момент я вызываю все функции в блейде приложения:
<script src="{{ asset('js/components/ToggleLogin.js')}}"></script>
<script src="{{ asset('js/components/ToggleImage.js')}}"></script>
<script src="{{ asset('js/components/ToggleMenu.js')}}"></script>
<script src="{{ asset('js/components/ScrollTo.js')}}"></script>
Но мне интересно, не должно ли быть возможным экспортировать все эти функции и затем импортировать их в app.js
. Приложение. js будет выглядеть так:
import ToggleImage from "./components/ToggleImage";
import ToggleLogin from "./components/ToggleLogin";
import ToggleMenu from "./components/ToggleMenu";
import ScrollTo from "./components/ScrollTo;
А внутри клинка я могу просто вызвать приложение. js:
<script src="{{ asset('js/app.js') }}" defer></script>
Вопрос
Является ли этот подход в принципе возможным?
Если да, как бы я сделал это правильно?
Когда я вызываю импортированную функцию внутри приложения. js это немедленно выполнено. Чтобы уточнить это:
import ToggleImage from "./components/ToggleImage";
ToggleImage();
Это, очевидно, вызывает открытие модального изображения сразу, когда пользователь заходит на сайт. Нормальным поведением должно быть то, что пользователь нажимает кнопку, которая переключает изображение.
Спасибо за ваше время:)
Редактировать
Мой текущее решение выглядит так:
import ToggleMenu from "./components/ToggleMenu";
import ToggleImage from "./components/ToggleImage";
import ScrollTo from "./components/ScrollTo";
import {
ToggleDesktopLogin,
ToggleMobileLogin
} from "./components/ToggleLogin";
import FadeLoginButton from "./components/FadeLoginButton";
import PostData from "./components/ReportModals/PostData";
import ToggleNewReport from "./components/ReportModals/ToggleNewReport";
import ValidateChars from "./components/ReportModals/ValidateChars";
window.onload = FadeLoginButton;
window.ToggleMenu = ToggleMenu;
window.ScrollTo = ScrollTo;
window.ToggleMobileLogin = ToggleMobileLogin;
window.ToggleDesktopLogin = ToggleDesktopLogin;
window.PostData = PostData;
window.ToggleNewReport = ToggleNewReport;
// landing page
if (document.location.pathname === "/") {
window.ToggleImage = ToggleImage;
}
// charValidation
if (document.body.contains(document.getElementById("send-report"))) {
window.ValidateChars = ValidateChars;
}
Итак, в app.blade. php у меня осталось это:
<script src="{{ asset('js/app.js')}}"></script>
Но у меня сложилось впечатление, что это может быть намного чище.