【问题标题】:return a JavaScript result (js file) to Angular 7将 JavaScript 结果(js 文件)返回给 Angular 7
【发布时间】:2025-12-03 14:50:02
【问题描述】:

如何将 JavaScript 结果(js 文件)返回到 Angular 7 并使用它在 Javascript 中,所有步骤都是同时执行的,但我希望返回结果然后运行 ​​Angular。我使用了以下代码,但它不是真的:

new Promise(function(resolve, reject) {
            sign(); // this is in JS file
            setTimeout(() => resolve(opSignature), 7000); // opSignature is result of sign()
          }).then(
              result => {
                this.saveChallenge(result); // call angular method
              }
          );

我需要在我的js文件中返回值,然后在Angular中使用这个结果在JavaScript中,所有步骤都是按顺序执行的,不允许完成前面的步骤并进入下一步我的问题是顶行result 仍然没有返回到 Angular 的下一行,现在需要顶行结果。 sign() 是 javascript 文件和 this.saveChallenge(result) 中的方法;是角 7

角度:

this._loginService.saveSignature(opSign)
        .pipe(map(response =>
          this.goToProcess(opSign)
        ))
        .subscribe( );

js文件:

function sign() {
// my code ...
}

【问题讨论】:

  • 无法理解问题。请详细说明
  • 我有一个在 Angular 中调用的外部 js 文件,我需要将结果传递给 Angular 方法。这个操作怎么做?能不能用js方法的结果传给Angular,在填这个值之前不去Angular?
  • 你能提供工作演示吗?很难理解您的期望。
  • 你有你正在使用的外部js库的声明文件吗?

标签: javascript angular angular7


【解决方案1】:

我解决了这个问题。 我在 js 文件中调用 angular 方法。 在js文件中:

window.angularComponentReference.zone.run(() => { window.angularComponentReference.loadAngularFunction(); });

角度:

    constructor(private ngZone: NgZone) {
      }
    ngOnInit() {
        window['angularComponentReference'] = { component: this, zone: this.ngZone, loadAngularFunction: () => this.angularFunctionCalled(), };

 private angularFunctionCalled() {
    ....
  }

【讨论】:

  • 这是一个很好的解决方案!可以修改为实际传递参数吗?我试过了,值在中间丢失了..
  • 我认为您可以传递参数,但可以传递另一种解决方案。我不认为失去价值,我必须尝试
【解决方案2】:

我想出了如何传递参数。通过删除箭头(顺便说一下,IE无法识别),它变得清晰:

在 index.html 中:

  <script type="text/javascript">
    function callAngularFunction(param) {
      window.angularComponentReference.zone.run(function() { return window.angularComponentReference.loadAngularFunction(param); });
    }
  </script>

然后,在 .ts 文件中:

  ngOnInit() {
    window['angularComponentReference'] = { component: this, zone: this.ngZone, loadAngularFunction: (param) => this.angularFunctionCalled(param) };
    ...
  }
  angularFunctionCalled(param) {
    ...
  }

【讨论】: