$ scope。$ eval(stringFormula)在AngularJS中引发错误

时间:2019-05-29 06:26:26

标签: angularjs eval

我有一个项目,该项目是基于基于angularJS调用API的客户端解决方案。从API检索应在客户端解决方案上运行的公式,并且每个公式的参数将由客户端用户输入的值替换。

公式有点复杂,不是简单的加法或除法...。 示例:

"if('rented' == 'owned')
    { return     50 + 25;
}  else if( 'rented' == 'rented')
     {return    25;}
  else
   {  return   '' ;
}"

为了执行此字符串,建议使用$scope.$eval(string)。我已经使用一些简单的参数(例如$scope.$eval('1 + 2'))进行了尝试,并成功运行了。但是在上面的示例中,它抛出了这样的解析错误:

控制器中完整的angularJS函数如下:

$scope.calulateFormula = function (formula) {

     formula = formula.replace(/\[P1]/g, $scope.param1.value);
     formula = formula.replace(/\[P2]/g, $scope.param2.value);

     return $scope.$eval(formula);
 }

在HTML页面中:

<tr ng-repeat="formula in lstFormulas">                           
   </td> 
       <td ng-bind="calulateFormula(formula)">
   </td> 
 </tr>

lstFormulas是从API中检索的。

那我该如何解决此问题并使公式在我的网页上运行?

1 个答案:

答案 0 :(得分:0)

如果您可以将所有变量替换为作用域中的值,则可以使用纯js:

var f = new Function(formula);
console.log(f());