【问题标题】:Checkbox value changes to true/false after click单击后复选框值更改为真/假
【发布时间】:2014-10-29 17:45:32
【问题描述】:

我正在根据模型$scope.config.kind 中的值动态构建表单字段(复选框和下拉菜单)。我正在根据模型中的值动态设置每个复选框的模型名称。表单创建得很好,但是当我选择/选中复选框时,它的值会变为 true 和 false。如何使其标签在选择/未选择时不改变?

 <div class="col-md-1">
            <div class="form-group">
                <label class="sm">Kind</label>
                <ul class="list-inline">
                    &nbsp;
                    <li ng-repeat="kind in config.kind">
                        <div class="checkbox">   
                            <label class="xsm-label">
                                <input type="checkbox" name="kind" ng-model="kind" ng-value="{{kind}}">&nbsp;{{kind}}
                            </label>
                        </div>
                    </li>
                </ul>    
            </div>

【问题讨论】:

    标签: angularjs forms


    【解决方案1】:

    问题是因为您使用相同的变量来存储种类的名称和值。 复选框上的 ng-model 会将您的变量设置为 true 或 false。 解决方案是为每种类型设置一个对象:

    $scope.config.kind = [{
      name: 'Bug',
      value: false
    }, {
      name: 'Task',
      value: false
    }, {
      name: 'RFE',
      value: true
    }, {
      name: 'Other',
      value: false
    }];
    

    现在您可以将视图重构为:

     <div class="col-md-1">
            <div class="form-group">
                <label class="sm">Kind</label>
                <ul class="list-inline">
                    &nbsp;
                    <li ng-repeat="kind in config.kind">
                        <div class="checkbox">   
                            <label class="xsm-label">
                                <input type="checkbox" name="kind" ng-model="kind.value" ng-value="{{kind.value}}">&nbsp;{{kind.name}}
                            </label>
                        </div>
                    </li>
                </ul>    
            </div>
    

    【讨论】:

    • 谢谢你的帮助,marian2js!
    【解决方案2】:

    您需要为 ng-model 与 ng-value 使用不同的变量,因为您正在使用选定的 true/false 值覆盖该值。有几种方法可以做到这一点,但底线是你必须有一些其他的数据结构来接收真/假值。

    考虑将您的列表设为对象,例如:

      $scope.config = { kinds: [
                            {name:'Bug', selected: false},
                            {name:'Task', selected: false},
                            {name:'RFE', selected: false},
                            {name:'Other', selected: false}
                            ]}
    

    以便可以更改“选定”值。在这里看到 plunker:http://plnkr.co/edit/O4qL2hB2El6eB6P96XfE

    【讨论】:

    • @marian2js 打败了我!基本上相同的方法,我赞成他的。您可以查看我的 plunker 以了解它的运行情况。
    • 感谢您的帮助,迈克!
    猜你喜欢
    • 1970-01-01
    • 2016-09-01
    • 2014-05-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-09
    • 1970-01-01
    • 2017-10-14
    相关资源
    最近更新 更多