Я работаю над веб-сайтом, изначально разработанным на ванильном JS и JQuery. Недавно мы решили обновить наш пользовательский интерфейс до Angular и машинописного текста. Мы используем piwik для отслеживания активности наших клиентов, а модуль piwik был написан на чистом JS. Моя проблема в том, что всякий раз, когда на сайте изменяется маршрут, мне нужно снова запускать скрипт piwik (чтобы привязать события piwik к компонентам), но скрипт не выполняется снова, потому что сайты не обновлялись. Я хочу вручную выполнить скрипт из машинописного текста (возможно, используя JQuery). Все решения, которые я видел, заключались в том, чтобы вручную удалить скрипт из dom, а затем добавить его снова, но это похоже на взлом, есть ли способ выполнить скрипт с помощью webpack / JQuery / любой другой технологии?
Я не хочу переписывать скрипт piwik, все, что мне нужно, - это найти способ его программного выполнения с помощью машинописного текста.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Сам Angular Router обеспечивает наблюдаемый поток.
Вы можете создать защиту маршрута, которая подписывается на маршрут, когда происходит событие NavigationEnd, вызывая вашу логику.
constructor(private router: Router) {}
.....
this.router.events
.subscribe((event) => {
if (event instanceof NavigationEnd) {
console.info('NavigationEnd:', event);
}
});
Возможно, стоит почитать на События маршрутизатора
Предполагая, что piwiki существует в глобальной области, вы можете вызвать его с помощью InjectionToken.
Я совсем не знаком с этим пакетом, но что-то вроде:
import { InjectionToken } from '@angular/core';
export const PWIKIPLUGIN = new InjectionToken('PWIKIPLUGIN');
А затем вызовите его с помощью конструктора
constructor(@Inject(PWIKIPLUGIN) private pwikiPlugin) {}
Это должно дать вам возможность вызывать pwikiPlugin.something().
Но как мне выполнить сам скрипт?
Я не знаком с самим пакетом, вызывается ли он в настоящее время в вашем коде Angular? например piwik.run ()
В настоящее время у меня есть сценарий, и я добавляю его в часть «scripts»: [] моего файла angular.json.
Раньше я использовал github.com/angulartics/angulartics2 с Piwik