首页 > 解决方案 > 当函数名是字符串时如何调用函数

问题描述

我有这个:

    angular.module("angular-table").directive("atPagination", [
    function() {
      return {
        restrict: "E",
        scope: false,
        replace: true,
        template: paginationTemplate,
        link: function($scope, $element, $attributes) {

          //The function name
          let fn = '$scope.' +  $attributes.getDataFn;
          console.log($scope.$eval(fn),$attributes,$attributes.getDataFn, "$eval", fn); 
        }
    }
}

$scope.$eval在控制台(最后一行)中调用该函数。但是该函数没有被调用。

我正在尝试更改我用于表格和分页的这个库。我正在尝试将一个函数从我的控制器传递到它的指令中,以便在分页中单击下一个时调用它。

我不能以常规方式传递函数,因为它scope是错误的,我不想改变它。所以我像这样传递它

 <at-pagination at-config="tableConfig" 
     get-data-fn="getPaginatedData()" at-list="personnelsdata">
 </at-pagination>

我正在尝试使用该函数调用该函数,$eval但它不起作用。我究竟做错了什么?

标签: angularjsangularjs-directive

解决方案


app.directive("myDirective", function() {
  return {
    restrict: "E",
    scope: false,
    template: paginationTemplate,
    link: function(scope, element, attrs) {

      //The function name
      ̶l̶e̶t̶ ̶f̶n̶ ̶=̶ ̶'̶$̶s̶c̶o̶p̶e̶.̶'̶ ̶+̶ ̶ ̶$̶a̶t̶t̶r̶i̶b̶u̶t̶e̶s̶.̶g̶e̶t̶D̶a̶t̶a̶F̶n̶;̶
      let fn = attrs.getDataFn;
      console.log(scope.$eval(fn)); 
    }
})

scope.$eval方法评估 AngularJS 函数,而不是 JavaScript 函数。

有关详细信息,请参阅


推荐阅读