#javascript #jquery #laravel #vue.js #single-page-application
#javascript #jquery #laravel #vue.js #одностраничное приложение
Вопрос:
Недавно я установил новый проект Laravel Vue Spa, и я хотел использовать пользовательскую тему, шаблон CoolAdmin вместо той, которая прилагалась к проекту.
Но один из js-скриптов main.js это отказ от работы, загрузки или запуска. Поэтому меню гамбургеров, выпадающие меню и многие другие не работают. Я попытался скомпилировать файл с помощью Webpack.mix.js и даже импортировать скрипт в app.js и скомпилировал его, но это все равно не сработало.
Я не знаю, связана ли проблема с самим скриптом, но он очень хорошо работает в шаблоне без проекта laravel vue. Это сценарий
(function ($) {
// USE STRICT
"use strict";
// Dropdown
try {
var menu = $('.js-item-menu');
var sub_menu_is_showed = -1;
for (var i = 0; i < menu.length; i ) {
$(menu[i]).on('click', function (e) {
e.preventDefault();
$('.js-right-sidebar').removeClass("show-sidebar");
if (jQuery.inArray(this, menu) == sub_menu_is_showed) {
$(this).toggleClass('show-dropdown');
sub_menu_is_showed = -1;
}
else {
for (var i = 0; i < menu.length; i ) {
$(menu[i]).removeClass("show-dropdown");
}
$(this).toggleClass('show-dropdown');
sub_menu_is_showed = jQuery.inArray(this, menu);
}
});
}
$(".js-item-menu, .js-dropdown").click(function (event) {
event.stopPropagation();
});
$("body,html").on("click", function () {
for (var i = 0; i < menu.length; i ) {
menu[i].classList.remove("show-dropdown");
}
sub_menu_is_showed = -1;
});
} catch (error) {
console.log(error);
}
var wW = $(window).width();
// Right Sidebar
var right_sidebar = $('.js-right-sidebar');
var sidebar_btn = $('.js-sidebar-btn');
sidebar_btn.on('click', function (e) {
e.preventDefault();
for (var i = 0; i < menu.length; i ) {
menu[i].classList.remove("show-dropdown");
}
sub_menu_is_showed = -1;
right_sidebar.toggleClass("show-sidebar");
});
$(".js-right-sidebar, .js-sidebar-btn").click(function (event) {
event.stopPropagation();
});
$("body,html").on("click", function () {
right_sidebar.removeClass("show-sidebar");
});
// Sublist Sidebar
try {
var arrow = $('.js-arrow');
arrow.each(function () {
var that = $(this);
that.on('click', function (e) {
e.preventDefault();
that.find(".arrow").toggleClass("up");
that.toggleClass("open");
that.parent().find('.js-sub-list').slideToggle("250");
});
});
} catch (error) {
console.log(error);
}
try {
// Hamburger Menu
$('.hamburger').on('click', function () {
$(this).toggleClass('is-active');
$('.navbar-mobile').slideToggle('500');
});
$('.navbar-mobile__list li.has-dropdown > a').on('click', function () {
var dropdown = $(this).siblings('ul.navbar-mobile__dropdown');
$(this).toggleClass('active');
$(dropdown).slideToggle('500');
return false;
});
} catch (error) {
console.log(error);
}
})(jQuery);
(function ($) {
// USE STRICT
"use strict";
// Load more
try {
var list_load = $('.js-list-load');
if (list_load[0]) {
list_load.each(function () {
var that = $(this);
that.find('.js-load-item').hide();
var load_btn = that.find('.js-load-btn');
load_btn.on('click', function (e) {
$(this).text("Loading...").delay(1500).queue(function (next) {
$(this).hide();
that.find(".js-load-item").fadeToggle("slow", 'swing');
});
e.preventDefault();
});
})
}
} catch (error) {
console.log(error);
}
})(jQuery);
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
Пожалуйста, помогите, есть ли какой-либо другой способ заставить этот скрипт работать или запускать
ОТЛАДКА Итак, после некоторой отладки оказывается, что код перестает загружаться после цикла for и ”use strict” doesn’t work
. Пожалуйста, помогите
Ответ №1:
Вы должны знать, что Laravel использует Mix для компиляции Js-кода (на основе Webpack). Поэтому я рекомендую вам загрузить main.js
файл с помощью mix и импортировать Jquery непосредственно в ваш bootstrap.js
, не используя CDN. ex:
mix.scripts(['resources/js/main.js'], 'public/js')
Кроме того, вы должны загрузить Jquery перед любыми другими скриптами.
Комментарии:
1. Спасибо за ответ. Но я только что попробовал это, и это тоже не сработало.. Пожалуйста, есть ли другой способ?