如何解决打字稿中的“参考错误:未定义函数”错误

时间:2019-05-07 06:16:26

标签: typescript

我是新手。我想在我的应用程序中使用猪鼻日历。因此,在选择需要调用后端服务的日期时,我将其添加为javascript。我不知道如何从jquery库中调用服务。

$('.timetable').pignoseCalendar({
            select: function (date, context) {
                var dt = date[0];
                var myDate = new Date(dt);
                var selectDt = myDate.getUTCFullYear() + '-' + (myDate.getUTCMonth() + 1) + "-" + (myDate.getDate());

this.timetableservice.getTimetabledate(selectDt).pipe(
            takeUntil(this.unsubscribe),
            finalize(() => {
                this.loading = false;
                this.cdr.detectChanges();
            })
        ).subscribe(x => {
            if (x.rstat == "S") {
                this.outputData = x.rdata;
            }
        },
            err => console.error('Timetable Observer got an error: ' + err));               
            }
        });

1 个答案:

答案 0 :(得分:0)

由于Java中this引用的动态评估性质,您正在使用键pignoseCalendar将对象传递给select,该键的值是一个函数,并且在该函数内部,您将函数引用this.unsubscribe传递给takeUntil时,问题在于您正在使用select关键字为键function创建此函数值,因此当函数被执行后,需要在某个父范围(即全局范围)中执行,因为该函数未绑定到任何对象,并且this引用将始终指向该函数所绑定的对象,未绑定功能时,默认情况下将为window。要使this指向当前的类实例,您需要使用箭头函数,而不仅仅是将this.unsubscribe传递给takeUntil,因为this.unsubscribe将在不同的作用域,并且如果它在内部使用了this,那么this会指向其他东西,而不是您当前的类实例,除非您将其绑定到当前的类实例,否则整体修复将像这样< / p>

$('.timetable').pignoseCalendar({ 
  select: (date, context) => {  // Here
    var dt = date[0]; 
    var myDate = new Date(dt); 
    var selectDt = myDate.getUTCFullYear() + '-' + (myDate.getUTCMonth() + 1) + "-" + (myDate.getDate()); 
    this.timetableservice.getTimetabledate(selectDt)
      .pipe(
         takeUntil(() => this.unsubscribe()), // And here
         finalize(() => { 
           this.loading = false;
           this.cdr.detectChanges();
         })
      )
      .
      .
      .