javascript - 无法从函数访问 angular2 服务

标签 javascript angular angularjs-service

无法从 else 条件内的 function() 访问我的服务。我在浏览器终端中得到的只是“TypeError:this._hitoService 未定义”。当执行 else 条件时,我需要使用服务获取数据。我该怎么办?

@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");
                }
            });
       }



 }

最佳答案

有很多有同样问题的例子。根据经验,切勿在带有 TypeScript 的类中使用 function 关键字。这会将 this 上下文替换为当前函数作用域的上下文。始终使用 () => {} 表示法:

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

});

关于javascript - 无法从函数访问 angular2 服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41847766/

相关文章:

javascript - TypeScript 函数式编程模式是否能实现舒适的对象构造?

angular-material2 - 切换 Angular Material 复选框中的值

angularjs - 如何从 Controller 知道 http.post().then... 是否成功?

javascript - 工厂实现问题

javascript - 当列文本框值更改时如何使用 jQuery 获取表行索引

Java servlet doGet() 在第一次调用后不刷新

javascript - 输入提交按钮上的ui-sref?

angular - 如何在 Angular 4 中实现 window.open 类型的功能

javascript - 将 `ngModel` 从子组件管道传输到父组件

javascript - 手动引导和覆盖配置中的 Angular 服务的问题