【发布时间】:2017-07-28 21:11:59
【问题描述】:
我有一个使用外部 JavaScript 文件的 angular 4 服务,我需要传递一个函数作为 JavaScript 函数之一的参数,例如 JavascriptAPI.setMessageHandler(this.onMessage.bind(this)) JavascriptAPI.setStatusHandler(this.onStatus.bind(this))。
当我运行它时,我收到以下错误 polyfills.bundle.js:2610 未捕获的类型错误:JavascriptAPI.be 不是函数 在 WebSocket.e2.onopen (在 webpackJsonp.../../../../script-loader/addScript.js.module.exports (scripts.bundle.js:28) 进行评估,:69:404) 在 WebSocket.wrapFn [as __zone_symbol___onopen] (polyfills.bundle.js:3484) 在 ZoneDelegate.webpackJsonp.../../../../zone.js/dist/zone.js.ZoneDelegate.invokeTask (polyfills.bundle.js:2839) 在 Zone.webpackJsonp.../../../../zone.js/dist/zone.js.Zone.runTask (polyfills.bundle.js:2606) 在 ZoneTask.webpackJsonp.../../../../zone.js/dist/zone.js.ZoneTask.invokeTask [作为调用] (polyfills.bundle.js:2913) 在调用任务(polyfills.bundle.js:3779) 在 WebSocket.globalZoneAwareCallback (polyfills.bundle.js:3797)
import { Injectable } from '@angular/core'
declare var JavascriptAPI: any;
@Injectable()
export class SampleService {
constructor() { }
onMessage(messages) {
console.log('onMessage', messages)
}
onStatus(messages) {
console.log('onStatus', messages)
}
onInit(token: string) {
JavascriptAPI.disconnect()
JavascriptAPI.setConnect(token)
const serverUrl = ['http://localhost:8080']
JavascriptAPI.setServers(serverUrl)
JavascriptAPI.setMessageHandler(this.onMessage.bind(this))
JavascriptAPI.setStatusHandler(this.onStatus.bind(this))
}
}
谢谢,感谢您的宝贵时间。
【问题讨论】:
-
您的示例没有足够的信息来告诉您如何修复它,但看起来您需要找出 JavascriptAPI 在全局命名空间中的位置并将其分配给该变量。所以如果有一个window.JavascriptAPI 对象,你会这样写:declar var JavascriptAPI: any = window.JavascriptAPI。不知道该代码在哪里,但这是基本概念。通常我会在遇到这些问题时设置一个断点并检查窗口对象中发生的事情以了解如何引用代码
-
感谢您的快速回复,我想知道我将 typescript 方法 onMessage 作为函数传递给 JavascriptAPI.setMessageHandler() 函数的方式正确/错误?这是正确的方法吗? webpack 抱怨 onMessage 不是一个函数。
-
我会给你更多的提示,但我会把它放在下面的答案中,因为这里没有足够的空间。
-
我不确定您是否理解我的问题或者我对您的回答的理解是否正确,我在访问 JavaScriptAPI 时没有任何问题。我能够访问 JavaScriptAPI,以下代码均由 webpack 正确编译, JavascriptAPI.disconnect() JavascriptAPI.setConnect(token) const serverUrl = ['localhost:8080']JavascriptAPI.setServers(serverUrl) 涉及到 JavascriptAPI。 setMessageHandler(this.onMessage.bind(this)),webpack 抱怨 this.onMessage.bind(this) 不是函数
-
我需要知道,如何将 typescript 类方法/函数(作为回调函数)传递给 JavascriptAPI 的 setMessageHandler 函数
标签: javascript angular typescript2.0