$ scope. $ eval (stringFormula) выбрасывает ошибки в AngularJS - PullRequest
0 голосов
/ 29 мая 2019

У меня есть проект, который является клиентским решением на основе 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 голосов
/ 29 мая 2019

Если вы можете заменить все переменные значениями из области видимости, тогда вы можете использовать обычный js:

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