Javascript 角度单击事件共享到其他单击

Javascript 角度单击事件共享到其他单击,javascript,angularjs,Javascript,Angularjs,假设我有两个使用AngularJS ng click的链接,它们都有相同的点击事件,通过传递相同的范围变量 ui.myclick(myVar1, myVar2, myVar3) <a ng-click="ui.myclick(myVar1, myVar2, myVar3)">link1</a> <a ng-click="ui.myclick(myVar1, myVar2, myVar3)">link2</a> 那么我的ng单击将只是: <

假设我有两个使用AngularJS ng click的链接,它们都有相同的点击事件,通过传递相同的范围变量

ui.myclick(myVar1, myVar2, myVar3)

<a ng-click="ui.myclick(myVar1, myVar2, myVar3)">link1</a>

<a ng-click="ui.myclick(myVar1, myVar2, myVar3)">link2</a>
那么我的ng单击将只是:

<a ng-click="commonclick">Link1</a>
<a ng-click="commonclick">Link2</a>
Link1
链接2

您可以在控制器中添加该功能,并在ng click属性上使用它,如下所示:

<div ng-controller="MyCtrl as m">
    <a ng-click="m.f(arg)">Link 1</a>
    <a ng-click="m.f(arg)">Link 2</a>
</div>
<script>
    angular
        .module('app', [])
        .controller('MyCtrl', ['$scope', function($scope) {
            $scope.f = function(arg) {
                console.log(arg);
            }
        }])
    ;
</script>

链接1
链接2
有棱角的
.module('应用程序',[])
.controller('MyCtrl',['$scope',函数($scope){
$scope.f=函数(arg){
控制台日志(arg);
}
}])
;

您可以在控制器中添加该功能,并在ng click属性上使用它,如下所示:

<div ng-controller="MyCtrl as m">
    <a ng-click="m.f(arg)">Link 1</a>
    <a ng-click="m.f(arg)">Link 2</a>
</div>
<script>
    angular
        .module('app', [])
        .controller('MyCtrl', ['$scope', function($scope) {
            $scope.f = function(arg) {
                console.log(arg);
            }
        }])
    ;
</script>

链接1
链接2
有棱角的
.module('应用程序',[])
.controller('MyCtrl',['$scope',函数($scope){
$scope.f=函数(arg){
控制台日志(arg);
}
}])
;

不,你不能按你想做的方式去做。阻碍是您不能使用
bind
方法或
function
,您可以使用它们在ngInit中创建函数。不过,我至少可以想到两种变通办法

1。控制器中的辅助工厂

。。。
其中,
createFunction
在控制器中定义为:

$scope.createFunction = function(fn) {
    var args = [].slice.call(arguments, 1);
    return function() {
        return fn.apply(null, args);
    };
};
然后您将能够使用
commonclick
as

<a ng-click="commonclick()">Link1</a>
<a ng-click="commonclick()">Link2</a>

不,你不能用你想做的方式去做。阻碍是您不能使用
bind
方法或
function
,您可以使用它们在ngInit中创建函数。不过,我至少可以想到两种变通办法

1。控制器中的辅助工厂

。。。
其中,
createFunction
在控制器中定义为:

$scope.createFunction = function(fn) {
    var args = [].slice.call(arguments, 1);
    return function() {
        return fn.apply(null, args);
    };
};
然后您将能够使用
commonclick
as

<a ng-click="commonclick()">Link1</a>
<a ng-click="commonclick()">Link2</a>

如果您的目标是使标记尽可能干净,您可以将设置
ng click
作为一个函数,使用和
ng repeat

标记:

<a ng-repeat="link in links" ng-click="clickFunction(link)">{{link}}</a>
.controller('Main Controller', function($scope) {
    $scope.links = ['Link1', 'Link2']; //define links

    $scope.clickFunction = function(value) {
        //define what clickFunction does
    }
})

如果您的目标是使标记尽可能干净,您可以将设置
ng click
作为一个函数,使用和
ng repeat

标记:

<a ng-repeat="link in links" ng-click="clickFunction(link)">{{link}}</a>
.controller('Main Controller', function($scope) {
    $scope.links = ['Link1', 'Link2']; //define links

    $scope.clickFunction = function(value) {
        //define what clickFunction does
    }
})

不,这不是可用于
ng click
的语法,我也不建议这样做。您的控制器正是您想要处理事件逻辑的位置,或者如果您正在使用指令,则位于指令内部。请回答您的问题。不,这不是可用于
ng click
的语法,我也不建议这样做。您的控制器正是您要处理事件逻辑的位置,或者如果您正在使用指令,则位于指令内部。请回答您的问题。