角度形式复选框默认值

时间:2015-01-26 09:35:39

标签: javascript angularjs forms validation checkbox

我一直试图抓住使用表单验证最佳实践的Angular表单,这迫使我使用表单名称并将所有模型作为其子项,以便我可以绑定表单名。$ valid以及所有其他的东西。

但是我无法为任何表单子模型设置预定义值,因为我无法在控制器中访问它们。

我现在最大的问题是如何检查虚假复选框,因为最初复选框未选中但没有值,只有在点击更改值时才会填充。

这是我的表单代码

  <form name="addAppForm" ng-if="creatingApp == false">

      <input type="text" placeholder="App Name" required autofocus ng-model="addAppForm.appName">

      <input icheck id="ios" type="checkbox" ng-init="addAppForm.iOS = false" ng-model="addAppForm.iOS">
       <label for="ios"><i class="icon-apple"></i> iOS {{addAppForm.iOS}}</label>

       <input icheck id="android" type="checkbox" ng-init="addAppForm.android = false" ng-model="addAppForm.android">
       <label for="android"><i class="icon-android"></i> Android {{addAppForm.android}}</label>

    <button ng-disabled="addAppForm.$invalid && (addAppForm.iOS != true && addAppForm.android != true)" type="submit" ng-click="addNewApp(addAppForm.iOS, addAppForm.android, addAppForm.appName)" class="button front-primary large radius expand">Let's GO!</button>

  </form>

“required”指令不适用于复选框,我尝试初始化模型,但没有运气。

3 个答案:

答案 0 :(得分:0)

当您添加这样的命名表单时,它会被添加到您的控制器范围中。您可以使用名称在控制器内部访问它,类似于HTML:

$scope.addAppForm.android;

在表单设置完成后,即使尚未点击该表单,也应立即评估为真/假。

编辑:Fiddle,在控制器中访问表单。

答案 1 :(得分:0)

我已经弄明白我的代码有什么问题,ng-init实际上有效,我只是把运营商搞砸了 - &gt;&gt; ng-disabled="addAppForm.$invalid && (addAppForm.iOS != true && addAppForm.android != true)"

应该是ng-disabled="addAppForm.$invalid || (addAppForm.iOS != true && addAppForm.android != true)"

问题仍然存在,即使在表单外的同一视图中也无法从控制器访问表单。

答案 2 :(得分:0)

我仍然不明白为什么你必须在Formcontroller中保存你的数据你可以使用一个对象(这里我称之为'model')并将所有表单值放入其中。您的Formcontroller对象('addAppForm')具有功能并保存验证错误,请参见此处:https://docs.angularjs.org/api/ng/type/form.FormController此对象在Controller初始化后添加到Controller的范围

请参阅:https://docs.angularjs.org/api/ng/directive/form

Directive that instantiates FormController.

If the name attribute is specified, the form controller is published onto the current scope under this name.

如果没有选择至少一个复选框

,这是使表单无效的方法

var myApp = angular.module("myApp", []);


myApp.controller("myController1", function($scope) {

  $scope.model = {
    "ios": false,
    "android": false
  };
});
<div ng-app="myApp" ng-controller="myController1">
  <form name="addAppForm">
    <input type="text" placeholder="App Name" required autofocus ng-model="model.appName" />
    <input id="ios" name="ios" type="checkbox" ng-model="model.ios" ng-required="!model.ios && !model.android" />
    <label for="ios"><i class="icon-apple"></i> iOS</label>
    <input id="android" name="android" type="checkbox" ng-model="model.android" ng-required="!model.ios && !model.android" />
    <label for="android"><i class="icon-android"></i> Android</label>

    <button ng-disabled="addAppForm.$invalid " type="submit" ng-click="addNewApp(model.ios, model.android, model.appName)" class="button front-primary large radius expand">Let's GO!</button>
  </form>
</div>
<script src="https://code.angularjs.org/1.3.8/angular.min.js"></script>