如何在解析jQuery promise后调用angular2方法

时间:2018-03-06 20:47:10

标签: angular typescript

我在Angular5应用程序中使用第三方库MarvinJS。一世 需要在解决MarvinJS承诺后调用方法this.sharedService.openMarvinModal(false);

当我调用该方法时,它给出了错误。

Uncaught (in promise) TypeError: Cannot read property 'sharedService' of undefined
at eval (marvin-modal.component.ts:58)
at <anonymous>

代码段:

import {
  Component,
  OnInit
} from "@angular/core";

import { SharedService } from "../services/shared.service";

import * as $ from "jquery";
declare var MarvinJSUtil: any;

@Component({
  selector: "app-marvin-modal",
  templateUrl: "./marvin-modal.component.html",
  styleUrls: ["./marvin-modal.component.scss"]
})
export class MarvinModalComponent
  implements OnInit {

  constructor(private sharedService: SharedService) {}

  ngOnInit() {
  }

  getStructure() {
    const p  = MarvinJSUtil.getEditor("#sketch");
    p.then(function(sketchInstance) {
      sketchInstance.exportStructure("smiles").then(function( source) {
        console.log(source);
        this.sharedService.openMarvinModal(false);
      });
    });
  }
}

如何解决这个问题?任何人都可以帮助我。

提前致谢。

1 个答案:

答案 0 :(得分:2)

您需要使用简单的function替换arrow function - 不要创建this引用的其他上下文。

p.then((sketchInstance) => {
   sketchInstance.exportStructure("smiles").then((source) => {
      console.log(source);
      this.sharedService.openMarvinModal(false);
   });
});