AngularJS - 在ng-click中使用数据绑定{{}}

7
有没有一种动态更改ng-click调用方法的方法?
类似这样:
ng-click = "{{functionCalled}}"

然后通过以下方式声明函数:

$scope.functionCalled = "callThisFunction(param)";
2个回答

8
文档中可以看出,ngClick只是在作用域的上下文中评估表达式。你可以动态引用一个函数,但我不确定这是否是预期的方法。我可能会显式调用一个函数,并根据参数切换行为,例如ng-click='myFunction(myParams)'。无论如何,这是您想要实现的示例:http://jsfiddle.net/8cvGt/2/

HTML

<div ng-app='foo' ng-controller='ctrl'>
    <div ng-click='this[myVar]()'>{{ bar }}</div>
</div>

JavaScript

var app = angular.module('foo',[]).controller('ctrl',function($scope) {
    $scope.myVar = 'callIt';
    $scope.bar = 'before';
    $scope.callIt = function() {
        $scope.bar = 'after';
    }
});

太好了,谢谢。不过,我能动态设置一个参数吗?比如说函数调用it(callId)? - FootsieNG
1
当然可以,只需将参数添加到您的调用中。this[myFunc](myParam) - Patrick
你有这个的一个可用示例吗?除非你使用this[myFunc]('quiz.ans1')进行调用,否则它不应该使用变量名。 - Patrick
1
我已经更新了这个 JSFiddle,其中包含我认为你所说的场景。http://jsfiddle.net/8cvGt/5/ - Patrick
1
嗯,是的,我可能不会使用这个来完成那个用例。可以为每个视图动态确定部分 ng-include='myViewVariable + "button_section.html"',扩展视图以包括该部分,或者在视图之间具有一致的 API,可以像 ng-click='done()' 这样调用 done 函数来确定它需要什么参数。不知道应该选择哪种方法,因为不了解应用程序的更多信息。 - Patrick
显示剩余6条评论

3
假设您有一组可能的函数列表,请使用一个中央函数将调用分派到其他函数。
ng-click="dispatchFunction(param)"

那么

$scope.functionToCall = 'callThisFunction';

$scope.dispatchFunction = function(param) {
    switch($scope.functionToCall) {
         case (callThisFunction): callThisFunction(param);
    };

编辑:实际上,使用完整的调度表进行操作:

http://designpepper.com/blog/drips/using-dispatch-tables-to-avoid-conditionals-in-javascript

这篇文章介绍如何在JavaScript中使用调度表来避免条件语句。建议采用完整的调度表来实现该功能。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接