【问题标题】:Checkbox works but radio button not working in AnguarJS复选框有效,但单选按钮在 AngularJS 中无效
【发布时间】:2017-10-17 18:47:45
【问题描述】:

我正在使用 AngularJS 和过滤器选项,如下所示:

<input type="checkbox"  name="{{cat}}" ng-model="ctrl.filter[cat]" id='{{$index}}' class='chk-btn styled-checkbox' ng-click="removeAnother();"/>

这很好用。当我选择一个项目时,它会获得正确的值。但我不需要多选,所以我想将复选框转换为单选按钮。

如果我使用单选按钮,我们的功能将不起作用。请查看demo.

(function() {
  'use strict';

  angular.
  module('myApp', []).
  controller('WineCtrl', WineCtrl);

  // Functions - Definitions
  function WineCtrl() {
    // Variables - Private
    var self = this;

    // Variables - Public
    self.filter = {};
    self.wines = [{
        name: 'Wine A',
        category: 'red'
      },
      {
        name: 'Wine B',
        category: 'red'
      },
      {
        name: 'Wine C',
        category: 'white'
      },
      {
        name: 'Wine D',
        category: 'red'
      },
      {
        name: 'Wine E',
        category: 'red'
      },
      {
        name: 'Wine F',
        category: 'white'
      },
      {
        name: 'Wine G',
        category: 'champagne'
      },
      {
        name: 'Wine H',
        category: 'champagne'
      }
    ];

    // Functions - Public
    self.filterByCategory = filterByCategory;
    self.getCategories = getCategories;

    // Functions - Definitions
    function filterByCategory(wine) {
      return (self.filter[wine.category] || noFilter(self.filter)) ? 'show' : 'hide';
    }

    function getCategories() {
      return (self.wines || []).
      map(function(wine) {
        return wine.category;
      }).
      filter(function(wine, idx, arr) {
        return arr.indexOf(wine) === idx;
      });
    }

    function noFilter(filterObj) {
      return Object.
      keys(filterObj).
      every(function(key) {
        return !filterObj[key];
      });
    }
  }

}());
.hide {
  opacity: 0.5;
}

.show {
  opacity: 1;
}
<div ng-controller="WineCtrl as ctrl">
  <b>Category:</b>
  <div ng-repeat="category in ctrl.getCategories()">
    <label>
      <input type="radio" ng-model="ctrl.filter[category]" />
      {{ category }}
    </label>
  </div>
  <hr />
  <div ng-repeat="wine in ctrl.wines">
    <div class="{{ctrl.filterByCategory(wine)}}">
      {{ wine.name }} <i>({{ wine.category }})</i>
    </div>

  </div>
  <hr />
  <b>Number of results: {{ filteredWines.length }}</b>
</div>

谢谢。

【问题讨论】:

  • 你试过设置默认checked=false吗?
  • 我试过检查 false 但它不起作用。你可以看演示。

标签: javascript jquery html angularjs


【解决方案1】:

您只需添加ng-value="true" 以便单选按钮反映模型值:

<input type="radio" ng-model="ctrl.filter[category]" ng-value="true" />

然后是一些处理切换的指令:

<input ng-click="filter = !filter" ng-value="!filter" ng-checked="filter" type="radio" ng-model="ctrl.filter[category]" />

new demo

【讨论】:

  • 我添加了 ng-value 但它不起作用。您可以测试演示。
  • @J.Doe 我测试了演示。您将需要其他逻辑来处理我将在上面添加的单选按钮的切换。
  • 是的,我在搞砸它。您将使用过滤器取消选中其他框。好亚历克斯,打败我。 docs.angularjs.org/api/ng/input/input%5Bradio%5D
猜你喜欢
  • 2021-05-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-20
  • 2017-12-24
  • 1970-01-01
  • 1970-01-01
  • 2015-03-19
相关资源
最近更新 更多