说我在按钮上有一个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')
由于
答案 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()
一次。
我希望这有帮助,我通常在创建指令时使用它,我需要触发一段代码。