2

有没有办法以角度模式形式创建自定义字段类型,能够对表单上的其他字段求和?我查看了指令/装饰器,但不确定如何引用要求和的字段?

4

1 回答 1

3

最简单的方法可能是让用户提供您想要总结的字段的键并使用$watchGroup

下面是一个表单定义的示例:

{
  type: "sum",
  sumFields: [
    "key.to.field1",
    "key.to.field2",
    "key.to.field3"
  ]
}

然后你需要在你的字段类型 sum 中有一个指令来实际总结事情。(警告,未经测试的代码)

<div class="form-control-group"> 
  <input disabled sum-it-up="form.sumFields" type="text">
</div>


angular.module('myModule').directive('sumItUp',function(){
  return {
    scope: true,
    link: function(scope, element, attr) {
      var keys = scope.$eval(attrs.sumItUp);.map(function(key){
         // Whatever you put in model is always available on scope
         // as model. Skipped ObjectPath for simplification.
         return 'model.'+key 
      }) 
      scope.$watchGroup(keys, function(values) {
        element.value(values.reduce(function(sum, value){ 
          return sum+value
        },0))
      })
    }
  }
})

您还可以做一个字段集类型的事情,并遍历items表单属性中的每个项目,然后从那里开始。该sfSelect服务也可能有用。希望有帮助!

于 2015-03-13T20:35:05.463 回答