AngularJS匿名函数作为插值中的参数

时间:2019-01-15 10:54:18

标签: angularjs

在我的控制器中,我有一个函数将另一个函数作为参数,例如:

$scope.myFun = (values, selector) => {
    values.forEach((value) => {
        selector(value);
    }
}

我可以使用插值从HTML中调用它吗?我尝试过:

{{ myFun(myVar, function(var) {return var/2;}) }}

不幸的是没有成功,插值中的语法无效。

2 个答案:

答案 0 :(得分:0)

您的代码可以简单地重组为以下内容:

$scope.myFun = (values) => {
    values.forEach((value) => {
        value = value / 2;
    }
}

您应该以这种方式思考-不要将应用程序逻辑分布在所有层中,最好将其保留在控制器或更好的服务中。这样,它就可以包含测试,并且对于其他开发人员(有时甚至是您)而言,更容易理解代码中发生的事情。

仅使用模板与用户互动,并避免将额外的复杂性添加到html文件中。

答案 1 :(得分:0)

您要执行的操作在angularJs中无效。根据您的.forEach,您正在遍历项目并执行功能。如果您解决了一些问题,但不能直接从模板中解决,则在控制器上可以这样做。计算功能(item / 2)本身必须位于angularjs中的某个位置,例如您的控制器或服务。

此外,您不会从计算中返回任何内容,因此即使您已解决上述问题,仍然需要返回结果。

这样重构:

<div ng-repeat="val in [2,4,6]">
    {{ $ctrl.myFun2(val, $ctrl.calc ) }}  
</div>

并在控制器(es6)上

  myFun2(value, selector) {
    return selector(value);
  }

  calc(val) {
    return val / 2;
  }