Угловая схема формы - как я могу создать "общее" поле

Есть ли способ создать пользовательский тип поля в форме угловой схемы, который может суммировать другие поля в форме? Я смотрел на директивы / декораторы, но не уверен, как ссылаться на поля для суммирования?

1 ответ

Решение

Возможно, самый простой способ - позволить пользователю предоставить ключи полей, которые вы хотите суммировать, и наблюдать за изменениями с помощью $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))
      })
    }
  }
})

Вы также можете сделать что-то типа fieldset и пройтись по каждому элементу в items свойство формы и оттуда. sfSelect услуга также может быть полезной. Надеюсь, это поможет!

Другие вопросы по тегам