如何知道谁是AngularJS中的调用函数?

时间:2016-02-01 09:13:11

标签: javascript jquery angularjs

我已经定义了这样的函数

    $scope.func1 = function(){

    //some task done here;

     $scope.func2 = functin(){
         //some other task done here
     }
}

现在在控制器中我调用了func1;但直接调用func2会写在模板上,如

<div class="someclass">{{func2 ()}}</div>
<div class="someRandomLinks" ng-click="sometask()">clickMe</div>

现在,当浏览器编译/执行此行时,会调用func2(),但除此之外,它也会在sometask()上调用。但我没有在这两件事之间找到任何约束或联系。

我知道我对我面临的问题给出了一个非常模糊和模糊的图像。如果您需要更多代码或确切代码,请发表评论。我没有在这里做出确切评论的原因是它非常大而且凌乱,我不确定问题所在的部分。

注意:我认为我的问题没有得到理解。我想知道的是&#34;是否可以知道谁调用func2(),无论什么时候被调用?&#34;

5 个答案:

答案 0 :(得分:1)

也许..

$scope.func1 = function() {
  ...
  // some task done here;
}

$scope.func2 = function() {
  ...

  some other task done here
}

在您的示例中,func2定义了func1

编辑:

直接调用

func2,因为您直接在模板中调用它。此外,如果函数仅在另一个函数中定义,则不会直接执行。

说,

function a() {
  ...

  function b() {
    ..
  }
}

a(); // This does not launch b().

编辑2:

您的func2可能会再次被调用,因为您在模板中调用它。这就是为什么当你点击时,模板会被刷新(消化)并再次运行。

答案 1 :(得分:0)

没有足够的声誉评论如此回答..

您正在func1中定义func2。它不会叫它。你必须明确地打电话。

$scope.func2 = function() {
  ...

  some other task done here
}
$scope.func1 = function() {
  ...
  // some task done here;

  $scope.func2();
}

答案 2 :(得分:0)

我不确定我是否完全理解你的问题,但我会尝试。

问题是,只有在您运行func2时才会定义func1

结果是{{func2()}}被评估为未定义,因此您没有看到任何内容。

看看这个JSFiddle

答案 3 :(得分:0)

我想你可以使用这个(如果我帮你做对的话)

<div class="someclass">{{func2 ($event)}}</div>
<div class="someRandomLinks" ng-click="sometask($event)">clickMe</div>

而不是Ctrl:

function func2(event) { ..... }
function sometask(event) { ... }

并且通过该事件,您可以获取元素触发函数。

答案 4 :(得分:0)

因此,通过这种方式,您有两个测试用例。

    浏览器完成加载后,将调用
  1. 函数func2
  2. 函数func2sometask()
  3. 调用

    因此,当您通过func2调用sometask()时,会传递其他参数,例如

    $scope.func2 = function(str) {     
    
        if(str==1010)
           console.log("I have called by sometask");
        }else{
           console.log("I have called by browser..");
        }
    }
    
        $scope.sometask  = function() {
    
          $scope.func2(1010);  
        }