我有一个项目,该项目是基于基于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中检索的。
那我该如何解决此问题并使公式在我的网页上运行?
答案 0 :(得分:0)
如果您可以将所有变量替换为作用域中的值,则可以使用纯js:
var f = new Function(formula);
console.log(f());