【问题标题】:md-checkbox to behave like radio button - AngularJSmd-checkbox 表现得像单选按钮 - AngularJS
【发布时间】:2017-07-09 20:09:14
【问题描述】:

我正在尝试md-checkbox 的行为类似于 Angular 1 中的单选按钮。我尝试使用以下代码但无法正常工作。有可能吗?

<md-checkbox class="md-primary" ng-model="color" name="color" ng-repeat="c in colors" ng-true-value="'{{c.id}}'" ng-false-value="">
    {{c.name}}
</md-checkbox>

提前致谢。

【问题讨论】:

  • 为什么不使用材质单选按钮?
  • @Soviut 我希望在我的 UI 中应用 md-checkbox 中的刻度线,它的行为应该像一个单选按钮。 md-radio-button 只有点样式对吗?有没有办法改变它?

标签: javascript angularjs angular-material


【解决方案1】:

在需要单选按钮时不要使用复选框。如果您希望单选按钮带有复选标记,请将 md-checkbox 使用的相同类应用于单选按钮。

为了美观而使用错误的表单控件是一个非常糟糕的主意;有各种各样的可访问性问题,例如如何在移动设备上处理它们,盲人的屏幕阅读器等。这样想,如果你想要一个红色按钮,你可以将按钮设置为红色。在这种情况下,只需将收音机的样式设置为支票。

【讨论】:

    【解决方案2】:

    您不必在每个复选框中都使用 ng-model。如果您利用ng-checkedng-click 非常简单...PLUNKER

    HTML:

    <md-checkbox ng-repeat="c in colors"
               ng-click="setSelectedColor(c)"
               ng-checked="c.id === selectedColor.id">
        {{c.name}}
    </md-checkbox>
    

    控制者:

    app.controller('MainCtrl', function($scope) {
        $scope.colors = [{id: 1, name: 'red'}, {id: 2, name: 'green'}];
        $scope.selectedColor; //You can set a initial selection if you want
    
        $scope.setSelectedColor = function(c){
            $scope.selectedColor = c;
        };
    });
    

    【讨论】:

    • 这工作正常。是否可以在没有ng-model 的情况下进行验证?你能告诉我如何验证你的答案吗?
    • 您要验证什么?必须选择一个选项?
    • 我想在其中添加ng-required 以便它反映在formName.colorName.$invalid 中,对吗?有没有办法做到这一点?
    • 你是对的,如果你想使用验证,你必须使用ng-model。我已经制定了一种解决方法以使其正常工作,但您只能检查该用户是否选择了至少一个选项。检查这个plunker
    • 但正如其他用户所说,如果您有一个单选按钮控件,那么要获得相同的功能需要做很多工作。无论如何,如果您对 plunker 仍有一些问题,请告诉我...
    【解决方案3】:

    应该如下,

     <md-checkbox class="md-primary" ng-model="color" name="color" ng-repeat="c in colors" ng-true-value="'c.id'" ng-false-value="">
            {{c.name}}
     </md-checkbox>
    

    演示

    // Code goes here
    
    var app = angular.module('app', ["ngMaterial"]);
    app.controller('myCtrl', function($scope) {
      $scope.colors = [{
        id: '001',
        name: "pink"
      }, {
        id: '002',
        name: "yellow"
      }];
    
    
    });
    <!DOCTYPE html>
    <html ng-app="app">
    
    <head>
      <title>Test angular md-select with material 0.11.0</title>
      <link rel="stylesheet" href="style.css" />
      <link rel="stylesheet" href="https://ajax.googleapis.com/ajax/libs/angular_material/0.11.0/angular-material.min.css" />
      <script src="http://code.jquery.com/jquery-2.1.4.min.js"></script>
      <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.5/angular.min.js"></script>
      <script src="https://ajax.googleapis.com/ajax/libs/angular_material/0.11.0/angular-material.min.js"></script>
      <script src="https://code.angularjs.org/1.4.1/angular-animate.js"></script>
      <script src="https://code.angularjs.org/1.4.1/angular-aria.js"></script>
    </head>
    <body ng-controller="myCtrl">
       <md-checkbox class="md-primary" ng-model="color" name="color" ng-repeat="c in colors" ng-true-value="'c.id'" ng-false-value="">
        {{c.name}}
      </md-checkbox>
    </body>
    
    </html>

    【讨论】:

    • 我尝试使用您的代码,但它的行为不像单选按钮。此外,它没有让我得到ng-model 的价值。
    【解决方案4】:

    如果你会像ng-true-value="{{c.id}}"一样通过,应该可以工作

    根据角料documentation

    ng-true-value - expression - 选择表达式时应设置的值。

    【讨论】:

    猜你喜欢
    • 2013-07-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-16
    • 1970-01-01
    • 2012-09-17
    • 1970-01-01
    相关资源
    最近更新 更多