检测从angularjs中的ng click调用函数

时间:2014-04-28 17:42:12

标签: javascript angularjs

说我在按钮上有一个ng-click事件

<button ng-click="callMe()" />

在我的AngularJS控制器中,我有类似

的东西
myApp.controller('myController', ['$scope', function ($scope)] {
    $scope.callMe = function() {
        console.log("call originated from...");
    };

    $scope.anotherMethod = function(){
        $scope.callMe();
    }
});

我能从内部告诉callMe方法从何处调用它?即,用户在点击按钮时是否触发了它,还是来自anotherMethod方法?

理想情况下,我不想在函数调用中传递其他变量。 e.g。

callMe('fromClick')

由于

3 个答案:

答案 0 :(得分:2)

如果你必须执行不同的任务,当通过点击或其他东西触发该功能时,我的建议是使用不同的功能,并且只对实际相同的任务使用相同的功能:

HTML

<button ng-click="onClick()" />

的JavaScript

myApp.controller('myController', ['$scope', function ($scope)] {

    $scope.onClick = function () {
        //do click related tasks 

        callMe();
    };

    $scope.anotherMethod = function(){
        //do other tasks

        callMe();
    };

    function callMe() {
        //do stuff that has to be done in both cases
    }
});

答案 1 :(得分:0)

你可以这样做:

<button ng-click="callMe($event)" />

$scope.callMe = function($event) {
    console.log("call originated from..." + $event.target);
};

但这又不是AngularJS phisolophy(伤害视图和控制器之间的分离)。请使用替代解决方案查看Accessing clicked element in angularjs以获得更完整的答案。

答案 2 :(得分:0)

我为此做的是使用$broadcast

https://docs.angularjs.org/api/ng/type/$rootScope.Scope

以下是使用示例:

您需要将$rootScope传递给您的控制器

myApp.controller('myController', ['$scope, $rootScope', function ($scope, $rootScope)] {

然后在$scope.callMe()

$scope.callMe = function() {
  console.log("call originated from...");
  $rootScope.$broadcast('callThis')
};

最后在$scope.anotherMethod()

$scope.isCallThis = false

$scope.anotherMethod = function () {
  if (!$scope.isCallThis) {
    $scope.$on('callThis', function () {
      // Do stuff here
    })

    $scope.isCallThis = true
  }
}

我使用了$scope.isCallThis = false来确保您只设置$scope.$on()一次。

我希望这有帮助,我通常在创建指令时使用它,我需要触发一段代码。