打字稿中的调用函数在 alertify.js 中不起作用
Calling function in typescript not working in alertify.js
我在 typescript 中使用 alertify 插件,它无法识别 getData
函数。请看下面的代码
copyTemplate(id:any, pluginId:any, name:any ) {
alertify.confirm(`Are you sure you want to copy ${name} to a new project template?`, function () {
this.getData();
}, function() {
(<HTMLInputElement>document.getElementById('prefGroup')).value = '0';
});
}
有什么问题吗?浏览器错误:
core.umd.js:3064 EXCEPTION: this.getData is not a
functionErrorHandler.handleError @ core.umd.js:3064next @
core.umd.js:8039schedulerFn @
core.umd.js:3689SafeSubscriber.__tryOrUnsub @
Subscriber.ts:238SafeSubscriber.next @
Subscriber.ts:190Subscriber._next @ Subscriber.ts:135Subscriber.next @
Subscriber.ts:95Subject.next @ Subject.ts:61EventEmitter.emit @
core.umd.js:3675NgZone.triggerError @ core.umd.js:4038onHandleError @
core.umd.js:3999ZoneDelegate.handleError @
zone.js?1489977130473:207Zone.runTask @
zone.js?1489977130473:139ZoneTask.invoke @ zone.js?1489977130473:304
core.umd.js:3069 ORIGINAL STACKTRACE:ErrorHandler.handleError @
core.umd.js:3069next @ core.umd.js:8039schedulerFn @
core.umd.js:3689SafeSubscriber.__tryOrUnsub @
Subscriber.ts:238SafeSubscriber.next @
Subscriber.ts:190Subscriber._next @ Subscriber.ts:135Subscriber.next @
Subscriber.ts:95Subject.next @ Subject.ts:61EventEmitter.emit @
core.umd.js:3675NgZone.triggerError @ core.umd.js:4038onHandleError @
core.umd.js:3999ZoneDelegate.handleError @
zone.js?1489977130473:207Zone.runTask @
zone.js?1489977130473:139ZoneTask.invoke @ zone.js?1489977130473:304
core.umd.js:3070 TypeError: this.getData is not a function
at Object.eval [as onOkay] (project-templates.component.ts:126)
at HTMLButtonElement. (alertify.js?1489977130519:280)
at ZoneDelegate.invokeTask (zone.js?1489977130473:236)
at Object.onInvokeTask (core.umd.js:3969)
at ZoneDelegate.invokeTask (zone.js?1489977130473:235)
at Zone.runTask (zone.js?1489977130473:136)
at HTMLButtonElement.ZoneTask.invoke (zone.js?1489977130473:304)ErrorHandler.handleError @
core.umd.js:3070next @ core.umd.js:8039schedulerFn @
core.umd.js:3689SafeSubscriber.__tryOrUnsub @
Subscriber.ts:238SafeSubscriber.next @
Subscriber.ts:190Subscriber._next @ Subscriber.ts:135Subscriber.next @
Subscriber.ts:95Subject.next @ Subject.ts:61EventEmitter.emit @
core.umd.js:3675NgZone.triggerError @ core.umd.js:4038onHandleError @
core.umd.js:3999ZoneDelegate.handleError @
zone.js?1489977130473:207Zone.runTask @
zone.js?1489977130473:139ZoneTask.invoke @ zone.js?1489977130473:304
Subscriber.ts:241 Uncaught TypeError: this.getData is not a function
使用箭头函数。 "this" 的范围在回调中是不同的
copyTemplate(id:any, pluginId:any, name:any ) {
alertify.confirm('Are you sure you want to copy ${name} to a new project template?', () => {
this.getData();
}, () => {
(<HTMLInputElement>document.getElementById('prefGroup')).value = '0';
});
}
或者把this的值存到函数外使用
copyTemplate(id:any, pluginId:any, name:any ) {
let self = this;
alertify.confirm('Are you sure you want to copy ${name} to a new project template?', function() {
self.getData();
}, function() {
(<HTMLInputElement>document.getElementById('prefGroup')).value = '0';
});
}
我在 typescript 中使用 alertify 插件,它无法识别 getData
函数。请看下面的代码
copyTemplate(id:any, pluginId:any, name:any ) {
alertify.confirm(`Are you sure you want to copy ${name} to a new project template?`, function () {
this.getData();
}, function() {
(<HTMLInputElement>document.getElementById('prefGroup')).value = '0';
});
}
有什么问题吗?浏览器错误:
core.umd.js:3064 EXCEPTION: this.getData is not a functionErrorHandler.handleError @ core.umd.js:3064next @ core.umd.js:8039schedulerFn @ core.umd.js:3689SafeSubscriber.__tryOrUnsub @ Subscriber.ts:238SafeSubscriber.next @ Subscriber.ts:190Subscriber._next @ Subscriber.ts:135Subscriber.next @ Subscriber.ts:95Subject.next @ Subject.ts:61EventEmitter.emit @ core.umd.js:3675NgZone.triggerError @ core.umd.js:4038onHandleError @ core.umd.js:3999ZoneDelegate.handleError @ zone.js?1489977130473:207Zone.runTask @ zone.js?1489977130473:139ZoneTask.invoke @ zone.js?1489977130473:304 core.umd.js:3069 ORIGINAL STACKTRACE:ErrorHandler.handleError @ core.umd.js:3069next @ core.umd.js:8039schedulerFn @ core.umd.js:3689SafeSubscriber.__tryOrUnsub @ Subscriber.ts:238SafeSubscriber.next @ Subscriber.ts:190Subscriber._next @ Subscriber.ts:135Subscriber.next @ Subscriber.ts:95Subject.next @ Subject.ts:61EventEmitter.emit @ core.umd.js:3675NgZone.triggerError @ core.umd.js:4038onHandleError @ core.umd.js:3999ZoneDelegate.handleError @ zone.js?1489977130473:207Zone.runTask @ zone.js?1489977130473:139ZoneTask.invoke @ zone.js?1489977130473:304 core.umd.js:3070 TypeError: this.getData is not a function at Object.eval [as onOkay] (project-templates.component.ts:126) at HTMLButtonElement. (alertify.js?1489977130519:280) at ZoneDelegate.invokeTask (zone.js?1489977130473:236) at Object.onInvokeTask (core.umd.js:3969) at ZoneDelegate.invokeTask (zone.js?1489977130473:235) at Zone.runTask (zone.js?1489977130473:136) at HTMLButtonElement.ZoneTask.invoke (zone.js?1489977130473:304)ErrorHandler.handleError @ core.umd.js:3070next @ core.umd.js:8039schedulerFn @ core.umd.js:3689SafeSubscriber.__tryOrUnsub @ Subscriber.ts:238SafeSubscriber.next @ Subscriber.ts:190Subscriber._next @ Subscriber.ts:135Subscriber.next @ Subscriber.ts:95Subject.next @ Subject.ts:61EventEmitter.emit @ core.umd.js:3675NgZone.triggerError @ core.umd.js:4038onHandleError @ core.umd.js:3999ZoneDelegate.handleError @ zone.js?1489977130473:207Zone.runTask @ zone.js?1489977130473:139ZoneTask.invoke @ zone.js?1489977130473:304 Subscriber.ts:241 Uncaught TypeError: this.getData is not a function
使用箭头函数。 "this" 的范围在回调中是不同的
copyTemplate(id:any, pluginId:any, name:any ) {
alertify.confirm('Are you sure you want to copy ${name} to a new project template?', () => {
this.getData();
}, () => {
(<HTMLInputElement>document.getElementById('prefGroup')).value = '0';
});
}
或者把this的值存到函数外使用
copyTemplate(id:any, pluginId:any, name:any ) {
let self = this;
alertify.confirm('Are you sure you want to copy ${name} to a new project template?', function() {
self.getData();
}, function() {
(<HTMLInputElement>document.getElementById('prefGroup')).value = '0';
});
}