从角度2项目调用javascript文件

时间:2017-03-28 14:39:31

标签: javascript jquery angular getscript

我在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);

现在日历正确呈现。但我希望(如果可能的话)在我的打字稿中引用日历。这可能吗?

2 个答案:

答案 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";