gpt4 book ai didi

javascript - Angular 2 typescript 调用javascript函数

转载 作者:数据小太阳 更新时间:2023-10-29 04:13:25 25 4
gpt4 key购买 nike

是否有从 Angular 2 (TypeScript) 中的组件调用 JavaScript 函数的正确方法?

这是我的组件:

import { ElementRef, AfterViewInit }       from '@angular/core';

export class AppComponent implements AfterViewInit {

constructor(private _elementRef: ElementRef) {
}

ngAfterViewInit() {
/**
* Works but i have this error :
* src/app.component.ts(68,9): error TS2304: Cannot find name 'MYTHEME'.
* src/app.component.ts(69,9): error TS2304: Cannot find name 'MYTHEME'.
*/
MYTHEME.documentOnLoad.init();
MYTHEME.documentOnReady.init();

/**
* Works without error, but doesn't seem like a right way to do it
*/
var s = document.createElement("script");
s.text = "MYTHEME.documentOnLoad.init(); MYTHEME.documentOnReady.init();";
this._elementRef.nativeElement.appendChild(s);
}
}

直接调用 JavaScript 函数会导致编译错误,但“编译”的 JavaScript 文件(app.component.js)中的语法是正确的:

AppComponent.prototype.ngAfterViewInit = function () {
MYTHEME.documentOnLoad.init();
MYTHEME.documentOnReady.init();
};

第二种方法 (appendChild) 没有错误,但我认为(从 typescript/angular 更改 DOM)不是正确的方法。

我发现了这个:Using a Javascript Function from Typescript我尝试声明接口(interface):

interface MYTHEME {
documentOnLoad: Function;
documentOnReady: Function;
}

但 TypeScript 似乎无法识别它(接口(interface)声明中没有错误)。

谢谢

编辑:

根据 Juan Mendes 的回答,这就是我的结尾:

import { AfterViewInit }       from '@angular/core';

interface MYTHEME {
documentOnLoad: INIT;
documentOnReady: INIT;
}
interface INIT {
init: Function;
}
declare var MYTHEME: MYTHEME;

export class AppComponent implements AfterViewInit {

constructor() {
}

ngAfterViewInit() {
MYTHEME.documentOnLoad.init();
MYTHEME.documentOnReady.init();
}
}

最佳答案

您必须使用 declare 告诉 TypeScript 外部 (JavaScript) 声明。参见 https://www.typescriptlang.org/docs/handbook/writing-declaration-files.html

interface MyTheme {
documentOnLoad: Function;
documentOnReady: Function;
}
declare var MYTHEME: MyTheme;

或匿名

declare var MYTHEME: {documentOnLoad: Function, documentOnReady: Function};

关于javascript - Angular 2 typescript 调用javascript函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37348166/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com