我在jQuery中编写了一个日历控件,我想在一个有角度的2项目中使用。
我从这个主题的其他答案中学到了我可以使用jQuery的getScript api来调用外部javascript文件。
我的calendar.component.ts看起来像这样:
import { Component, OnInit, AfterViewInit } from '@angular/core';
import { Auth } from '../auth.service';
declare var $:any;
declare var CustomCal:any;
@Component({
selector: 'app-calendar',
templateUrl: './calendar.component.html',
styleUrls: ['./calendar.component.css']
})
export class CalendarComponent implements OnInit {
private year : number;
myCal : any;
constructor(private auth : Auth) {
}
ngOnInit() {
}
ngAfterViewInit() {
this.year = 2017;
$.getScript('./app/calendar/zapCalendar.js', function(){
console.log("got call'd back");
this.myCal = new CustomCal(2017);
});
}
}
我收到控制台消息"接到电话'返回",然后显示一条错误消息,指出未定义CustomCal。
我的CustomCal类在zapCalendar.js中定义如下:
class CustomCal
{
constructor(nYear) {
this._mouseDown = false;
this._mouseDrag = false;
this._lastItem = 0;
this._nYear = nYear;
this.CreateCalendarFrame();
this.AddEventHandlers(this);
}
...
}
我已尝试在zapCalendar.js文件中导出该类,并尝试将以下内容添加到zapCalendar.js文件中:
$( function() {
var myCal = new CustomCal(2017);
});
我在这里缺少什么? 感谢
更新 我刚刚替换了这个(在zapCalendar.js中)
$( function() {
var myCal = new CustomCal(2017);
});
用这个:
var x = new CustomCal(2017);
现在日历正确呈现。但我希望(如果可能的话)在我的打字稿中引用日历。这可能吗?
答案 0 :(得分:1)
$.getScript('./app/calendar/zapCalendar.js', function(){
console.log("got call'd back");
this.myCal = new CustomCal(2017);
});
此处的内部函数将不具有相同的this
引用,因为它不会被调用绑定到您的对象。由于您使用的是TypeScript,因此您只需使用箭头功能即可更改此行为。
$.getScript('./app/calendar/zapCalendar.js', () => {
console.log("got call'd back");
this.myCal = new CustomCal(2017);
});
答案 1 :(得分:0)
您需要导出类然后将其导入组件
import {CustomCal} from "./app/calendar/zapCalendar";