Angular js $compile Javascript 窗口范围

Angular Js $compile Javascript Window Scoping

本文关键字:窗口 范围 Javascript compile js Angular      更新时间:2023-09-26

我在角度 ui 引导模态内部this的范围方面遇到了问题。当我在模态之外运行以下代码时,我没有问题:

  var GlobalVariable = GlobalVariable || {};
    (function(){
      doSomethingWith(GlobalVariable.field);
    })();

当在$modal之外调用时,GlobalVariable.field是完全可访问的。一旦我在$modal中运行此代码,GlobalVariable.field就是未定义的。现在我可以通过直接访问窗口来解决此问题。$modal对话框中的 GlobalVariable.field,但问题是在这种情况下doSomethingWith方法是需要访问全局变量的第三方库。我不打算遍历所有第三方库并将"window."添加到所有全局范围的变量中。

我知道当我调用 $modal.open 传入一些 HTML 时,它会通过角度$compile函数(我认为eval() HTML 作为过程的一部分)被破坏。我的猜测是,当$compile处理它时,它会为它分配一个新的 this 对象,这意味着我们不会从窗口继承所有全局范围的变量。

有什么方法可以让 angular 的$compile强制"继承"窗口的全局变量一直到我的模态?

看看我从 Angular-UI 引导文档生成的这个 Plunker:

http://plnkr.co/edit/jMcvTBDcrkPU7p4gFejT?p=preview

resolve

如您所见,模态创建了一个新作用域,因此要在该作用域内使用的任何内容都必须使用"resolve"传入并返回。 当您可以传递所需的任何内容时,无需强制继承。