Angular 表单复选框默认值

Angular form checkbox default value

我一直在尝试掌握应用表单验证最佳实践的 Angular 表单,这迫使我使用表单名称并将所有模型作为其子项,以便我可以绑定 formname.$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" 指令不适用于复选框,我尝试初始化模型但没有成功。

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

$scope.addAppForm.android;

在设置表单后的任何时候,即使尚未单击该表单,它的计算结果也应为 true/false。

编辑:Fiddle 在控制器中访问表单的位置。

我已经弄清楚我的代码出了什么问题,ng-init 确实可以工作,我只是混淆了这里的运算符 -->> ng-disabled="addAppForm.$invalid && (addAppForm.iOS != true && addAppForm.android != true)"

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

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

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

参见: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>