【问题标题】:AngularJS directive with binded function patrameter带有绑定函数参数的 AngularJS 指令
【发布时间】:2025-12-01 10:55:01
【问题描述】:

我有一个带有函数参数的 AngularJS 指令,当我简单地调用该指令时它工作得很好,我想概括它。 到目前为止我得到了什么:

.directive('panelBox', function () {
    return {
        restrict: 'E',
        scope: {
            values: '=',
            calculatefn: '&'
        },
        templateUrl: '/ProfitCalculator/PanelBox',
        controller: function ($scope) {


            $scope.calculate=function() {
                $scope.calculatefn();
            }
        }
    }
})

在主要范围内:

$scope.smartBookValues= {
name:'Smart Book',
text:'Smart book header',
controls:[]
};

和html:

<panel-box values="smartBookValues" calculateFn="smartBookCalculateFn()"></panel-box>

现在我正在尝试绑定值和calculateFn,所以我从calculateFn开始并做了:

$scope.smartBookValues= {
name:'Smart Book',
text:'Smart book header',
controls:[],
calculateFn:'smartBookCalculateFn()'
};

和html:

<panel-box values="smartBookValues" calculateFn="{{smartBookValues.calculateFn}}"></panel-box>

但我得到:[$parse:syntax]

语法错误:从 [{smartBookValues.calculateFn}}] 开始的表达式 [{{smartBookValues.calculateFn}}] 的第 2 列中的标记“{”无效键。

【问题讨论】:

  • 您将函数作为字符串传递,您是否尝试过传递实际函数?
  • 我该怎么做?
  • 声明 calculateFn: function() { console.log('something') },删除 HTML 中的大括号并使用连字符传递属性,如下所示:calculate-fn="smartBookCalculateFn()"。此外,您将指令中的范围声明为 calculatefn,并使用小写的 f,请注意这一点。
  • 现在根本不工作,无法使用该功能。而且它仍然没有绑定到存储在我的作用域中的动态函数名......

标签: angularjs angularjs-directive syntax-error


【解决方案1】:

首先,您声明为:

calculatefn: '&'   <-- small 'f'

所以html中的语法是这样的:

<panel-box values="smartBookValues" calculatefn="smartBookValues.calculateFn"></panel-box>  <-- no need for {{}}, as you passing as reference to scope, not as text

在 Google 上搜索“如何将函数传递给角度指令”

【讨论】:

  • 无论看起来如何。至于你的最后一句话,那是我来这里之前搜索的第一件事..
  • 这实际上有很好的例子*.com/questions/18378520/…