page navigationend change angular2 javascript angularjs node.js typescript web-scraping

navigationend - Angular 2: Llamar a una función de Javascript desde un mecanografiado



router events subscribe angular 4 (0)

Estoy creando una aplicación de Angular 2 donde tengo un componente que se supone que debe presentar una lista de datos en la vista correspondiente. Los datos se cargarán a través de un servicio de un archivo JSON que se supone que obtendrá sus datos de una función de JavaScript que es un raspador web. Esta función javascript debe invocarse cuando el componente se inicializa después de que se iniciará el servicio.

He buscado en todas partes en SO y otros lugares, pero no he encontrado una forma definitiva de ejecutar una función de JavaScript desde un componente. El enfoque más cercano que encontré fue en esta publicación SO que implementa una interfaz de mecanografía para cargar la función javascript. El problema es que no está claro desde la publicación qué es la función javascript o cómo debe usarse en el componente. En mi caso, necesito llamar al método request() que he encapsulado en la siguiente clase en base a este tutorial :

Scraper = function(url){ request(url, function(error, response, html){ if(!error){ var $ = cheerio.load(html); var title, release, rating; var json = { title : "", release : "", rating : ""}; $(''.header'').filter(function(){ var data = $(this); title = data.children().first().text(); release = data.children().last().children().text(); json.title = title; json.release = release; }) $(''.star-box-giga-star'').filter(function(){ var data = $(this); rating = data.text(); json.rating = rating; }) } fs.writeFile(''output.json'', JSON.stringify(json, null, 4), function(err){ console.log(''File successfully written! - Check your project directory for the output.json file''); }) // Finally, we''ll just send out a message to the browser reminding you that this app does not have a UI. res.send(''Check your console!'') }) ; }

Dentro del archivo mecanografiado, estaba pensando en implementar algo como esto:

interface Scraper { request: INIT; } interface INIT { init: Function; } declare var Scraper: Scraper;

y luego en la función ngOnInit() dentro de la clase de componente:

ngOnInit(): void{ //Calling javascript function? Scraper.request.init(); //Service to load JSON this._productService.getProducts() .subscribe(products => this.products = products, error => this.errorMessage = <any>error); }

No tengo idea si este es el uso correcto de la interfaz aquí porque es difícil de decir desde los documentos de mecanografía

Creo que podría estar en el camino correcto, pero no estoy seguro. ¿Cómo debería implementar la interfaz para ejecutar el método request() en la inicialización del componente?