【问题标题】:Multi State button like toggle in angularJS多状态按钮,如 angularJS 中的切换
【发布时间】:2013-09-04 14:02:18
【问题描述】:

我想在表格中实现一个功能,用户可以通过单击它来设置单元格的值。 可以说有 3-4 个状态,还附加了一个 ng-model。

我在 angularjs 中寻找切换按钮,但它们只是开/关类型。

简而言之;单击按钮会将值设置为:Active、Inactive、Excluded 寻找具有多种状态的解决方案。 非常感谢您提供任何帮助。

【问题讨论】:

    标签: javascript angularjs


    【解决方案1】:

    检查以下工作示例:

    http://jsfiddle.net/vishalvasani/ZavXw/9/

    和控制器代码

    function MyCtrl($scope) {
    
        $scope.btnarr=0;
        $scope.btnTxt=["Active","Inactive","Excluded"]
        $scope.change=function(){
            switch($scope.btnarr)
            {
                case 0:
                    $scope.btnarr=1;
                   break;
                case 1:
                     $scope.btnarr=2
                   break;
                case 2:
                     $scope.btnarr=0;
                   break;                
            }
        }
    }
    

    控制器的短版本

    function MyCtrl($scope) {
    
        $scope.btnarr=0;
        $scope.btnTxt=["Active","Inactive","Excluded"]
        $scope.change=function(){
          $scope.btnarr = ($scope.btnarr + 1) % $scope.btnTxt.length;
        }
    }
    

    和 HTML

    <div ng-controller="MyCtrl">
        <button ng-modle="btnarr" ng-Click="change()">{{btnTxt[btnarr]}}</button>
    </div>
    

    【讨论】:

      【解决方案2】:

      没什么大不了的。

      当我在 Angular 中制作菜单时,在每个项目上,我都会有一个“选择”功能,然后从列表中选择该特定对象...

      制作可迭代按钮更加流畅:

      var i = 0;
      $scope.states[
          { text : "Active" },
          { text : "Inactive" },
          { text : "Excluded" }
      ];
      
      $scope.currentState = $scope.states[i];
      
      $scope.cycleState = function () {
          i = (i + 1) % $scope.states.length;
          $scope.currentState = $scope.states[i];
          // notify services here, et cetera
      }
      
      
      <button ng-click="cycleState">{{currentState.text}}</button>
      

      实际的状态数组甚至不需要成为 $scope 的一部分,如果这是您使用这些对象的唯一地方 - 您需要在 @987654323 上拥有的唯一对象@ 将是 currentState,这是您在调用 cycleState 方法时设置的。

      【讨论】:

        【解决方案3】:

        这里有两种可能性:从列表中选择状态或通过单击按钮本身循环。

        http://jsfiddle.net/evzKV/4/

        JS 代码如下所示:

        angular.module('test').directive('toggleValues',function(){
        return {
            restrict: 'E',
            replace: true,
            template: '<div>Set Status:<div ng-repeat="value in values" class="status" ng-click="changeTo($index)">{{value}}</div><span ng-click="next()">Current Status (click to cycle): {{values[selectedValue]}}</span></div>',
            controller: ['$scope', '$element', function ($scope, $element) {
                $scope.values = ["Active", "Inactive", "Pending"];
                $scope.changeTo = function (index) {
                    $scope.selectedValue = (index < $scope.values.length) ? index : 0;
                };
        
                $scope.next = function () {
                    $scope.selectedValue = ($scope.selectedValue + 1) % $scope.values.length;
                    // the modulo is stolen from Norguard (http://stackoverflow.com/a/18592722/2452446) - brilliant idea
                };
        
                $scope.selectedValue = 0;
            }]
        };
        });
        

        HTML:

        <div ng-app="test">
            <toggle-values></toggle-values>
        </div>
        

        【讨论】:

        • 好吧。这不是一个真正的新想法,但我会接受它。修改这些类型的东西的另一种非常干净的方法是在两个语句中:i += 1; i %= length; 从微操作的角度来看,没有真正的区别。但它看起来真的很干净。
        猜你喜欢
        • 1970-01-01
        • 2011-06-16
        • 2020-09-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多