Событие щелчка по внешнему JS-файлу не работает в angular 8

#javascript #html #jquery #angular

#javascript #HTML #jquery #angular

Вопрос:

Я изучаю Angular 8 и столкнулся с одной проблемой. Я скачал один HTML-шаблон и интегрирую этот шаблон в angular.

При нажатии на кнопку. Он расширяется и отображает меню.

введите описание изображения здесь

введите описание изображения здесь

У меня есть файл js в папке активов scripts.js . И это scripts.js файл содержит код jquery для открытия и закрытия этого меню. Но после добавления html-кода в html моего компонентного файла это событие щелчка не работает. Когда я проверяю источник в браузере, я вижу scripts.js загружается в браузере. Но я не уверен, почему он не вызывает событие click. Ниже приведен html-код для события щелчка.

 <div class="header-close">
            <svg viewBox="0 0 100 25">
                <path id="curve_close" fill="#B4E3F2" d="M100, 25 C62.5, 25, 62.5, 25, 50, 25 S37.5, 25, 25, 25"
                        data-start-d="M100, 25 C62.5, 25, 62.5, 25, 50, 25 S37.5, 25, 25, 25"
                        data-end-d="M100, 25 C62.5, 25, 62.5, 0,  50, 0  S37.5, 25, 0,  25"/>
            </svg>
            <a href="javascript:;" id="menu-close"><i class="fa fa-close"></i></a>
        </div>


        <div class="header-tool">
            <div class="entry-tool">

                <svg viewBox="0 0 100 25">
                    <path id="curve_open" fill="#B2E2F2" d="M0, 0 C37.5, 0, 37.5, 25, 50, 25 S62.5, 0, 100, 0"
                        data-start-d="M0, 0 C37.5, 0, 37.5, 25, 50, 25 S62.5, 0, 100, 0"
                        data-end-d="M0, 0 C37.5, 0, 37.5, 0, 50, 0 S62.5, 0, 100, 0" />
                </svg>
                <a href="javascript:;" id="menu-handler"><i class="fa fa-bars"></i></a>
            </div>
        </div>
 

Идентификатор для моего тега привязки — menu-handler . и код, написанный в scripts.js это как показано ниже.

     // Menu event handler
var toggleMenu = function(close_menu){
    $('#header').find('.entry-header').toggleClass('show-menu');
    $('#header').find('.entry-header').slideToggle();

    $('#menu-handler').hide();
    $('#menu-close').hide();
    setTimeout(function(){
        if( close_menu ){ $('#menu-handler').fadeIn(); }
        else{ $('#menu-close').fadeIn(); }
    }, 800);
};

$('#menu-handler').on('click', function(){
toggleMenu(false);

    TweenMax.to($('#curve_open'), 0.4, {attr: {'d': $('#curve_open').data('end-d')}});
    setTimeout(function(){
        $('.header-close').show();
        $('.header-tool').hide();
        TweenMax.to($('#curve_close'), 0.4, {attr: {'d': $('#curve_close').data('end-d')}});
    }, 400);
});
 

Я также не получаю никаких ошибок при нажатии на кнопку. Я не уверен, можем ли мы вызывать внешние функции js непосредственно с компонентных HTML-страниц? или я должен использовать угловые события, такие как (click), а затем вызвать это.

Ответ №1:

Попробуйте этот подход

 import '..path../js/external-js-file.js';

declare var externalJsFile: any; // variable as the name of the function inside external-js-file.js

export class MyComponent {

    doSomething() {
        new externalJsFile(); // execute function 
    }

}
 

Комментарии:

1. Привет, прежде чем попробовать это, не могли бы вы предоставить мне информацию о том, почему нам нужно использовать этот подход? Почему мы не можем использовать его напрямую? Причина, по которой я спрашиваю, заключается в том, что я попробовал одну вещь. Я создал одну функцию jquery в scripts.js а затем в компонентном html я создал одну кнопку и привязал событие (щелчок) к этой кнопке. Тогда я смогу вызвать эту функцию. Именно поэтому я не могу позвонить в приведенном выше случае. Также, если я выполняю целое scripts.js в консоли браузера тогда тоже кнопка работает нормально. но то же самое не работает с angular.