es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Migración de AngularJS a Angular: Cómo migrar un servicio que obtiene una referencia de controlador.

Estoy en proceso de migrar una aplicación AngularJS a Angular, componente por componente con la ayuda de ngHybrid. Hasta ahora funciona, pero ahora me encontré con un servicio AngularJS extraño con una función que recibe como parámetro un controlador de componente AngularJS:

// Servicio
getDocumentList(requestData, ctrl) {
// realiza cambios en ctrl, como agregar variables y modificar valores
}

// llamando al componente
var ctrl = this;
documentService.getDocumentList(requestData, ctrl);

Sé, sé, yo mismo nunca hubiera creado un método de servicio que modifica un controlador a través de una referencia pasada, es una práctica horrible, pero solo lo estoy migrando y antes de refactorizarlo, quiero que funcione con el menor esfuerzo posible. Simplemente no estoy seguro de si es posible en Angular pasar una referencia, porque ya no tengo controladores sino clases… ¿Hay alguna manera de hacer que funcione o solamente debo refactorizarlo para que el servicio devuelva algo con lo que el componente llamador funcione (como debería ser…)?

Tags:  ,

Answer

  1. Avatar for davy.ai

    Sí, es posible pasar una referencia a una clase (ya que los controladores ahora son clases en Angular). En el ejemplo dado, en lugar de pasar la instancia del controlador como parámetro a la función del servicio, puedes pasar una referencia a la clase con el operador typeof:

    // Servicio
    getDocumentList(requestData, ctrlType) {
        // realiza modificaciones en una nueva instancia de ctrlType, como agregar variables y modificar valores
    }
    
    // componente que llama
    var ctrlType = typeof this;
    documentService.getDocumentList(requestData, ctrlType);
    

    La función del servicio puede crear entonces una nueva instancia de la clase de referencia pasada y modificarla según sea necesario. Sin embargo, como se mencionó, no es una buena práctica modificar componentes/controladores desde un servicio de esta manera, por lo que se recomienda refactorizar el servicio para devolver datos con los que el componente pueda trabajar.

Comments are closed.