• Empleos
  • Sobre nosotros
  • profesionales
    • Inicio
    • Empleos
    • Cursos y retos
  • empresas
    • Inicio
    • Publicar vacante
    • Nuestro proceso
    • Precios
    • Evaluaciones
    • Nómina
    • Blog
    • Comercial
    • Calculadora de salario

0

71
Vistas
No se puede llamar a un método declarado en una clase desde otra clase singleton

Como dice el título, estoy tratando de acceder a un método que está declarado en una clase (Publicación) desde otra clase (Comentarios) que sigue un patrón único. La clase de publicación es una clase de servicio que tiene algunos métodos para realizar llamadas a la API. Así que necesito tener acceso a ellos desde dentro de la clase Comentarios para poder hacer llamadas a la API.

Así es como se ve una versión simplificada de la clase Post en este momento:

 @Injectable({ providedIn: 'root' }) class PostService extends AnotherService { constructor( auth: AuthService, http: HttpClient ) { super('string', auth, http); } getPost( id: string ) { return this.http.get(`posts/${id}`); } }

Así es como se ve la clase Comentarios:

 class Comments { private postService: PostService; private static instance; private constructor() {} static createInstance() { if ( !Comments.instance ) { Comments.instance = new Comments(); } return Comments.instance; } getComments( id ) { // these does not even run this.postService.getPost( id ) .then( post => { console.log( post ); }) .catch( error => { console.log( error ); }); } }

¿Cómo puedo hacer para acceder a él?

=========ACTUALIZAR=======

Creando una instancia de la clase Comment en otra clase llamada ClassC.

 const instance - Comments.createInstance(); instance.getComments( id );
about 3 years ago · Juan Pablo Isaza
2 Respuestas
Responde la pregunta

0

Use un nuevo servicio para guardar los datos de su objeto de comentario, digamos que tenemos un servicio llamado SharedDataService.

 private _comments: Array<any> =[];// or array<IComment> (a defined interface from your part) class SharedDataService(){} get comments():Array<any>{ return this._comments} set comments(value:Array<any>){ this._comments = value; } }

Debe iniciar PostService en su constructor de comentarios

 private constructor(private postService: PostService,private sharedDataService :SharedDataService) { } getComments() { // these does not even run this.postService.getPost( '1' ) .then( post => { this.sharedDataService.comments = post // if You get an array of comments here console.log( post ); console.log(this.comments)// getter function its new value has been set }) .catch( error => { console.log( error ); }); get comments(){ this.sharedDataService.comments } }
about 3 years ago · Juan Pablo Isaza Denunciar

0

Si desea enviar dos solicitudes http en paralelo, obtenga sus valores. Debe usar el operador combineLatest rxjs. Su servicio de correos será así:

 getPost(id: string) { $postDataHttpRequest = this.http.get(`posts/${id}`); $commentsDataHttpRequest = this.http.get(`posts/${id}/comments`); return combineLatest($postDataHttpRequest, $commentsDataHttpRequest) }

///

Así es como se ve la clase Comentarios:

 private constructor(private postService: PostService) { } getComments() { this.postService.getPost( '1' ) .subscribe( (posts,comments) => { console.log(posts); console.log(comments); },(error)=>{console.log(error)}) }
about 3 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Nuestro proceso Comercial
Legal
Términos y condiciones Política de privacidad
© 2025 PeakU Inc. All Rights Reserved.

Andres GPT

Recomiéndame algunas ofertas
Necesito ayuda