Angular - 无法验证单选按钮的形式

时间:2016-12-11 11:08:45

标签: javascript angularjs forms angularjs-ng-form

我的form只有radio个按钮,form必须在提交前验证(用户必须选择一些内容)。用户选择单选按钮后,应使用ngclass应用某些样式。我有两个问题:
1。由于某种原因,默认选择最后一个选项。
2。我无法获得表单验证属性。当我选择其中的内容时,数据不会刷新。

plunkr

JS:

app.controller('MainCtrl', function($scope) {

  $scope.questionObject = [{
    "body": "abc"
  }, {
    "body": "def"
  }, {
    "body": "aghi"
  } ]
  $scope.selectAnswer=function(number,obj)
  {
    $scope.isChecked=number;
}
});

HTML:

  <div class="form-group" ng-form="form">
    <div class="col-lg-8 col-lg-offset-2 col-sm-12">
      <div class="row" ng-repeat="obj in questionObject track by $index">
        <div class="radio">
          <label class="choice" ng-class="{'choiceSelected': isChecked==$index}">
            <input type="radio"
                  name="optradio" 
                  ng-click="selectAnswer($index,questionObject.correct_answer)"
                  ng-model="radioInput">{{obj.body}}
          </label>
        </div>
      </div>
    </div>
  </div>
  <pre>
   dirty:{{form.$dirty}}
   pristine:{{form.$pristine}}
  </pre>

EDIT 这是表单输出。永远不会更新

   {
  "$error": {},
  "$name": "form",
  "$dirty": false,
  "$pristine": true,
  "$valid": true,
  "$invalid": false,
  "$submitted": false
}

2 个答案:

答案 0 :(得分:1)

试试这样。查找单选按钮的ng-model和ng-required属性。

<div name="myForm" novalidate ng-form>
    <div class="col-lg-8 col-lg-offset-2 col-sm-12">
      <div class="row" ng-repeat="obj in questionObject track by $index">
        <div class="radio">
          <label class="choice" ng-class="{'choiceSelected': isChecked==$index}">
        <input type="radio" name="optradio" ng-click="selectAnswer($index,questionObject.correct_answer)" ng-model="data.option" ng-value="obj.body" ng-required="data.option == ''">{{obj.body}}
      </label>

        </div>
      </div>
    </div>
  </div>

  <pre>
     dirty:{{myForm.$dirty}}
     pristine:{{myForm.$pristine}}
     $valid:{{myForm.$valid}}
     $invalid:{{myForm.$invalid}}
  </pre>

Plunker:https://plnkr.co/edit/crpV5QnSGdSv6rUBnTnR?p=preview

答案 1 :(得分:0)

使用单选按钮默认选择一个。您可以使用复选框代替并使用angularjs控制它们,以便只选择一个。

为此,请为每个问题对象提供一个最初为false的选定属性:

java.lang.Math

然后,当用户选择一个复选框时,您可以使用selectAnswer功能确保只选择一个复选框:

double degs = toDegrees(atan(tangent));

Plunker:https://plnkr.co/edit/0TBDHJEjDpiIjmhd3AqT?p=preview