无法在同一JS文件中的控制器内调用函数

时间:2016-12-25 19:12:28

标签: javascript angularjs

我的JS文件看起来像这样,我想在控制器内部使用函数()中声明的函数之一。

上传HTML时正在调用该文件。

 (function() {
//Lots of different functions
})();

(function(angular) {
//Controller that uses a function declared above.
})(window.angular);

我该怎么做?当我只是简单地说明函数的名称时,它表示"不能归档变量" - 很可能是因为在控制器初始化时没有加载该函数。

3 个答案:

答案 0 :(得分:1)

您只是创建了IIFE或立即调用的函数执行,这是一种所有开发人员使用它来避免在全局范围内定义变量或函数的技术,因为如果您添加任何没有此生命的东西

(function(){}); // iife

它将被分配给全局窗口对象。这就是你的控制器无法调用上面定义的函数的原因。所以你现在有两个不同的范围,第一个生命和第二个生命

答案 1 :(得分:0)

只有在外部作用域可用时,才能调用另一个函数中定义的函数。

foreach (my_object m in Source)
{
    foreach(string s in SearchWords)
    {
        If(m.column1.Contains(s) || m.column2.Contains(s) || m.column3.Contains(s))
        {
             results.Add(m);   
             break;
        }         
    } 
}

您可以通过

从控制器内调用外部功能
function outer() { 
this.inner = function() {
    alert("hi");
}
} 

答案 2 :(得分:0)

一些涉及相同想法的建议:

  1. 之外创建功能
    (function(angular) {
      //Controller that uses a function declared above.
    })(window.angular);
    

    这样可以从立即调用的函数内部访问它,并从外部立即调用函数。

  2. 在控制器内部创建函数时,可以将外部作用域访问,也可以将其附加到窗口,例如window.yourFunction = function() { ... }