2014-09-17 3 views
0

Есть ли простой способ с Angularjs для проверки радиогруппы, которая была включена в дополнительную директиву?AngularJs Radiobox group Validation

Требования к валидации: Пользователь не может отправить, если только одно из радиобоксов не было нажато.

Вот как я построил его:

HTML документ:

<ng-form name="salutationgroup"> 
     <radiotrigger model="mrms" name="gender" value='1' label="mr" ></radiotrigger> 
     <radiotrigger model="mrms" name="gender" value='2' label="ms" ></radiotrigger> 
</ng-form> 

JS документ:

Directives.directive('radiotrigger', function() { 
    return { 
     restrict: 'E', 
     scope: {}, 
     compile: function(element, attrs) { 
      var templateText = '<li><label><input type="radio" ng-model="' + 
        attrs.model + '" value="' + 
        attrs.value + '">' + 
        attrs.label + '</label></li>'; 

      element.replaceWith(templateText); 
     } 
    }; 
}); 

Большое спасибо за вашу поддержку.

+0

Угадайте вы пропустили пройти атрибут 'name', поэтому можно выбрать только одно значение? С другой стороны, установите атрибут 'required', и ngForm получит классы' ng-invalid 'и 'ng-invalid-required' css, которые сообщают вам, что ваш ngForm действителен. – naeramarth7

+0

@ naeramarth7, в то время как кажется, что это работает, похоже, что тогда всегда будет выбран переключатель, который не выбран, чтобы установить недопустимый [(plunk)] (http://plnkr.co/edit/ip0LqgIDqrn6cxYcPrJR?p=preview) –

ответ

1

Один из способов сделать это:

HTML

<ng-form name="salutationgroup"> 
    <radiotrigger model="mrms" name="gender" value='1' label="mr"></radiotrigger> 
    <radiotrigger model="mrms" name="gender" value='2' label="ms"></radiotrigger> 
    <input type="submit" ng-disabled="!enabled"></input> 
</ng-form> 

Директива (Наблюдайте 'нг-изменение = "включено = истина"'):

Directives.directive('radiotrigger', function() { 
    return { 
    restrict: 'E', 
    scope: {}, 
    compile: function(element, attrs) { 
     var templateText = '<li><label><input type="radio" ng-model="' + 
       attrs.model + '" value="' + 
       attrs.value + '" ng-change="enabled=true">' + 
       attrs.label + '</label></li>'; 

     element.replaceWith(templateText); 
    } 
}; 
+0

он не работал для меня. ok давайте сделаем это простым.

  • Как может выглядеть эта директива в этом случае? – eddyD

    +1

    @eddyD вы включили false вместо true ... –