【问题标题】:Selecting only one radio button in the same row and column在同一行和同一列中仅选择一个单选按钮
【发布时间】:2016-05-07 02:40:35
【问题描述】:

我有一个单选按钮表。在单击一个时,整个列将被选中。我试图让它在同一行和同一列中只能选择一个单选按钮。

关于这个主题有一个类似的帖子有一个有效的答案: https://stackoverflow.com/a/26887972/2056066

但是,作为 Angularjs 和 Angular Material 的新手,我正在努力适当地翻译代码......有人可以帮忙吗?谢谢!

编辑:按要求提供代码。

<md-radio-group ng-model="data.group1">
  <md-radio-button value="Apple" class="md-primary">Apple</md-radio-button>
  <md-radio-button value="Banana"> Banana </md-radio-button>
  <md-radio-button value="Mango">Mango</md-radio-button>
</md-radio-group>

【问题讨论】:

  • 您发布的代码运行良好 - codepen.io/yccteam/pen/mPaBaJ。你能发布一个显示错误的实时代码吗?
  • @yccteam 这是一个匆忙的例子,但请看这里:codepen.io/JesterJeffrey/pen/VaqMRZ。虽然添加另一个数据组可能会解决此问题,但为我的表的每一行设置另一个数据组似乎不切实际......

标签: angularjs angular-material


【解决方案1】:

您需要使用ng-change 来监控用户刚刚点击了哪一列。 row 可以直接查看如下图。这是您正在寻找的解决方案。

 <md-content layout="column" flex style="background-color:orange">
<div layout="row" layout-margin>
  <md-radio-group layout="row" flex ng-model="selectedItem.row1.value"  ng-change=check(1,selectedItem.row1)>
    <md-radio-button ng-repeat="fruit in firstRow" ng-value="$index" class="md-primary" flex="20">{{fruit.name}}</md-radio-button>
  </md-radio-group>
</div>
<div layout="row" layout-margin>
  <md-radio-group layout="row" flex ng-model="selectedItem.row2.value" ng-change=check(2,selectedItem.row2)>
    <md-radio-button ng-repeat="fruit in firstRow" ng-value="$index" class="md-primary" flex="20">{{fruit.name}}</md-radio-button>
  </md-radio-group>
</div>
</md-content>

控制器

 $scope.selectedItem = {};

$scope.firstRow = {
  0: {
    name: "Apple 1",
    value: "apple1"
  },
  1: {
    name: "Banana 1",
    value: "banana1"
  },
  2: {
    name: "Mango 1",
    value: "mango1"
  },
   3: {
    name: "Grapes 1",
    value: "grapes1"
  },
   4: {
    name: "Strawberry 1",
    value: "strawberry1"
  },

};

$scope.check = function(row, data){

data.row = row;
data.name = $scope.selectedItem[data.value];

angular.forEach($scope.selectedItem, function(value,key){

  if(value.value === data.value && value.row != row){
    console.log(key)
    value.value = undefined;
    value.row = undefined;
  }
})

};

这是有效的解决方案http://codepen.io/next1/pen/NNemvJ

【讨论】:

    【解决方案2】:

    看到您的实时代码后,答案很简单,这与单选按钮的工作方式有关。 您已经设置了一个具有相同值的无线电对的无线电组。因此,当ngModel 的值为banana 时,所有带有value="banana" 的单选按钮都被选中 - 正如预期的那样。 如果您希望一次只选择一项,则应在同一个单选组中设置唯一值: http://codepen.io/yccteam/pen/grZGJM

    <md-radio-group ng-model="data.group1">
    <div layout="row" >
          <md-radio-button value="Apple" class="md-primary">Apple</md-radio-button>
          <md-radio-button value="Banana"> Banana </md-radio-button>
          <md-radio-button value="Mango">Mango</md-radio-button>
      </div>
       <div layout="row" >
          <md-radio-button value="Orange">Orange</md-radio-button>
          <md-radio-button value="Strawberry"> Strawberry </md-radio-button>
          <md-radio-button value="Rassberry">Rassberry</md-radio-button>
    </div>
        </md-radio-group>
    

    【讨论】:

    • 那么在不改变值的情况下就没有办法做到这一点吗?如果是这样,是否有以编程方式更改值?问题是我的表的行是根据我的数据集生成的,我无法事先设置值...
    • ...并且似乎更改值仍然不允许在同一列中进行多项选择;只能选择一个。
    • 这就是你想要的?单选按钮不适用于多选。使用复选框。否则为每个单选按钮添加一个 ngmodel 并删除单选组。抱歉没有分享一个例子。在移动端
    • 没问题。我很难找到解释我的问题的词语,我感谢所有考虑的帮助。我认为你让我走上了正轨;研究使用 $index 来定义适当的组和值。再次感谢!
    猜你喜欢
    • 2015-01-09
    • 1970-01-01
    • 2012-07-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-05
    • 2013-04-12
    • 1970-01-01
    相关资源
    最近更新 更多