javascript - 来自字符串的 AngularJS 表达式

标签 javascript angularjs

注意:类似于:angularjs execute expression from variable但我不想让所有可能性和正在使用的数据集弄乱我的范围。

我希望能够在 Angular 的表达式中使用预先确定的公式。

示例:

  var config = {
    "Test": {
      name: "test",
      formula: true,
      formulaValue: "item['propertyOne'] + item['propertyTwo']"
    }
  }

<div ng-repeat="item in myArray">
  <span ng-if="config[item.name].formula">{{config[item.name].formulaValue}}</span>
</div>

formulaValue 中的公式进行计算,就像我这样输入:

<div ng-repeat="item in myArray">
  <span>{{item['propertyOne'] + item['propertyTwo']}}</span>
</div>

我该如何实现这个目标?为每种类型的公式创建 $scope 函数也不太可行,因为这些公式在配置中设置的数量相当大。

最佳答案

这不是最理想的配置设置,但最坏的情况下您需要使用 eval(),由于安全性,它不太受欢迎

类似于:

function parseConfig(item, configKey){
   if(config[configKey].formula){
      return eval(config[configKey].formulaValue);
   }
}
$scope.parseConfig = parseConfig;

将其放入您的配置的服务中,但现在仅放在范围内。

在 View 中会是这样的

{{parseConfig(item, 'Test')}}

如果是我,我会更喜欢看起来像这样的配置

  var config = {
    "Test": {
      name: "test",
      formula: true,
      formulaType: 'concat',
      formulaValue: ['propertyOne','propertyTwo']
    }

然后您将检查 FormulaType 并根据 FormulaValue 中的属性执行所需操作,而无需使用 eval()

关于javascript - 来自字符串的 AngularJS 表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38088164/

相关文章:

php - 通过 Web 界面对 css 文件进行永久更改?

javascript - 给定代码中 <svg> 和 <canvas> 实现有什么区别?

javascript - 使用 javascript 和 php 推送 MySQL 数据

javascript - 可以触发 HTTP 请求的 HTML 元素

javascript - 使用 ng-repeat 创建特定元素后隐藏它们

javascript - React.js 和 ES6 : Any reason not to bind a function in the constructor

html - 主 css 搞砸了 bootstrap css

javascript - ngOptions 按值比较

javascript - Angular 模态 Controller 范围

javascript - ng-click、ng-mouseover 等指令在 Angular Controller 中生成的子元素中不起作用