Angular Js $编译Javascript窗口范围

时间:2016-02-26 13:06:35

标签: javascript angularjs closures

我在angular-ui bootstrap模式中的this范围内遇到问题。当我在模态之外运行以下代码时,我没有遇到任何问题:



  var GlobalVariable = GlobalVariable || {};

    (function(){

      doSomethingWith(GlobalVariable.field);

    })();




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

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

有没有办法让我能够获得有意义的“汇编”来强制继承'窗口的全局变量一直到我的模态?

1 个答案:

答案 0 :(得分:0)

看一下我从Angular-UI bootstrap文档中生成的这个Plunker:

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

resolve

正如您所看到的,模式创建了一个新范围,因此必须使用“resolve”传递要在该范围内使用的任何内容并返回。当你可以通过任何你需要的东西时,没有必要强制继承。