我有两个服务,第一个是第二个服务注入,这样:
rule.service.ts
@Injectable()
export class RuleService {
constructor(
private _resourceService: ResourceService
){}
someMethod(url: string) {
this._resourceService.getData(url).then((res) => {
console.log(res);
}
}
}
resource.service.ts
@Injectable()
export class ResourceService {
constructor(
http: Http
) { }
public getData(url?: string): Promise<T> {
//some code
}
}
调用服务 jQuery:(
private run(input: any, a_parameters: any) {
$("select[name='" + a_parameters[0] + "']").change(function(e: any) {
return new Promise((resolve) => {
let array: any[] = [];
this._resourceService.getData(a_parameters[1]).then(() => {
let result: any;
...
但是当我尝试从 RuleService 调用 someMethod 时,我收到此控制台错误:
EXCEPTION:Uncaught(在promise中):TypeError:无法读取属性 &#39;的getData&#39;未定义的TypeError:无法读取属性&#39; getData&#39;的 未定义 在eval(eval at(http://localhost:8099/app.js:457:2),:210:39) 在新的ZoneAwarePromise(eval at(http://localhost:8099/polyfills.js:2304:2),:695:29) 在HTMLSelectElement.eval(eval at(http://localhost:8099/app.js:457:2),:208:20) 在HTMLSelectElement.dispatch(http://cdn.execon.pl/resources/GRM/js/libs/jquery-1.11.0.min.js:3:8066) 在HTMLSelectElement.r.handle(http://cdn.execon.pl/resources/GRM/js/libs/jquery-1.11.0.min.js:3:4767) 在ZoneDelegate.invokeTask(eval at(http://localhost:8099/polyfills.js:2304:2),:363:31) at Object.onInvokeTask(eval at(http://localhost:8099/vendor.js:101:2),:3971:41) 在ZoneDelegate.invokeTask(eval at(http://localhost:8099/polyfills.js:2304:2),:362:36) 在Zone.runTask(eval at(http://localhost:8099/polyfills.js:2304:2),:166:47) 在HTMLSelectElement.ZoneTask.invoke(eval at(http://localhost:8099/polyfills.js:2304:2),:416:38) ErrorHandler.handleError @ core.umd.js?e2a5:3064 next @ core.umd.js?e2a5:8041 schedulerFn @ core.umd.js?e2a5:3689 SafeSubscriber .__ tryOrUnsub @ VM86162:223 SafeSubscriber.next @ VM86162:172 Subscriber._next @ VM86162:125 Subscriber.next @ VM86162:89 Subject.next @ VM86159:55 EventEmitter.emit @ core.umd.js?e2a5:3675 NgZone.triggerError @ core.umd.js?e2a5:4040 onHandleError @ core.umd.js?e2a5:4001 ZoneDelegate.handleError @ zone.js?fad3:334 Zone.runGuarded @ zone.js?fad3:142 _loop_1 @ zone.js?fad3:540 drainMicroTaskQueue @ zone.js?fad3:549 ZoneTask.invoke @ zone.js?fad3:420 ListPicker._handleMouseUp @ 关于:空白:540
任何人都可以告诉我,我做错了什么?如何在服务中纠正实施服务?
答案 0 :(得分:3)
您需要使用箭头功能来保留this
$("select[name='" + a_parameters[0] + "']")
.change((e: any) => { // <== arrow function instead of FE(function expression)
return new Promise((resolve) => {
let array: any[] = [];
this._resourceService.getData(a_parameters[1]).then(() => {