2017-01-25 5 views
0

Не удается получить доступ к моей службе из функции() У меня есть условие else. Все, что я получаю, в терминале браузера: «TypeError: this._hitoService undefined». Мне нужно получить данные, используя службы, когда выполняется условие else. Как я могу это сделать?Невозможно получить доступ к службам углового2 от функции

@Component({ 
    selector: 'app-time-line', 
    templateUrl: './time-line.component.html', 
    styleUrls: ['./time-line.component.css'], 
    providers: [HitoService], 
    entryComponents: [FormHitoComponent] 
}) 
export class TimeLineComponent implements OnInit, OnChanges { 
    @Input() calbuscador: String; 

nom_cal1: any; 
hito1: IHito[]; 
    hito: any; 

    constructor(private _hitoService: HitoService) { } 

    ngOnInit() { 


} 

ngOnChanges(){ 
     if (typeof this.calbuscador === "undefined"){ 
      swal("Atencion!", "Busca un calendario con el buscador del Side Menu", "error") 
     } 
     else{ 
     this.nom_cal1 = this.calbuscador; 
      swal({ 
       title: "Are you sure?", 
       text: "Se cargara el calendario : " + this.calbuscador, 
       type: "warning", 
       showCancelButton: true, 
       confirmButtonColor: '#DD6B55', 
       confirmButtonText: 'Yes, I am sure!', 
       cancelButtonText: "No, cancel it!", 
       closeOnConfirm: false, 
       closeOnCancel: false 
      }, function(isConfirm) { 
       if (isConfirm) { 
        swal({ 
         title: 'Cargando timeline!', 
         text: 'Cargando el Calendario en el Timline con sus hitos!', 
         type: 'success' 
        }, function() { 
          this._hitoService.getHitos() 
          .subscribe(hito1 =>{ 
          this.hito1 = hito1 
          console.log(this.hito1); // defined! 
          console.log("nomcal1" + this.nom_cal1); 
          if (typeof this.nom_cal1 === "undefined"){ 
           swal("Atencion!", "Busca un calendario con el buscador del Side Menu") 
          }else{ 
          drawtimeline1_1(this.hito1, this.nom_cal1); 
          } 
          }); 

        }); 

       } else { 
        swal("Cancelled", "No se cargara el Timeline :)", "error"); 
       } 
      }); 
     } 



} 

ответ

2

Много примеров там с той же проблемой. Правило большого пальца, никогда не используйте ключевое слово function внутри ваших классов с TypeScript. Это заменит контекст this на контекст текущей области действия. Всегда используйте () => {} обозначения:

swal({ 
     ... 
}, (isConfirm) => { 

}); 
+1

или определить переменную, чтобы посмотреть на «это» из функции (например, пусть _self = это.) И использовать _self в функции. –

+1

@OdysseasIoannou большая вещь о TypeScript заключается в том, что вам не нужно делать это, как в JavaScript. Итак, нет, не делайте этого – PierreDuc

+0

«Функции стрелок - это новый синтаксис ES6 для написания функций JavaScript, который позволит сэкономить время разработчиков и упростить область действия» не является функцией машинописи –

Смежные вопросы