【问题标题】:How to toggle between two string values like boolean True/False inside AngularJS?如何在AngularJS中的两个字符串值(如布尔True/False)之间切换?
【发布时间】:2013-09-01 02:06:44
【问题描述】:

我有一个按钮,点击它应该会显示/隐藏一些区域。

button(ng-click="areaStatus='on'")
.area(ng-class="areaStatus")

我不想只使用 ng-show/ng-hide 然后将其分配给布尔 areaStatus,但我想要更复杂的东西,例如开/关/隐藏/透明/随便什么。

有没有一种方法可以在点击时在“开”和“关”之间切换 areaStatus,而无需为其编写函数,只需使用内联表达式?

【问题讨论】:

  • 在这种情况下你不能使用 ng-switch 吗?

标签: javascript angularjs pug


【解决方案1】:

不太清楚你想要什么或者你为什么要避免想要一个函数,但是我会去做我认为你想做的事情:

<button ng-click="areaStatus = !areaStatus">Toggle</button>
<div ng-class="{'red' : areaStatus, 'green' : !areaStatus}">
    This is some text
</div>

这是fiddle that shows it as well,下面是代码sn-p。

var myModule = angular.module('myModule', []);

myModule.controller('myController', function ($scope) {

    $scope.areaStatus = false;
});
.red {
    color:red;
}
.green {
    color:green;
}
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.0.3/angular.min.js"></script>
<div ng-app="myModule">
    <div ng-controller="myController">
        <button ng-click="areaStatus = !areaStatus">Toggle</button>
        <div ng-class="{'red' : areaStatus, 'green' : !areaStatus}">
            This is some text
        </div>
    </div>
</div>

ng-click 中,您只需翻转areaStatusboolean 值。使用ng-class,您可以传入一个对象。 redgreen 将是您要应用的类。它们将在以下表达式正确时应用。

另一种方法是在您的班级中使用 Angular 的 {{ }}

<div class="{{areaStatus}}">   </div>

所以如果areaStatus 包含字符串"hidden",那么这就是其中的类。但是您仍然需要一种方法来更改 areaStatus 的值(在函数、多个按钮或复选框中)。

【讨论】:

    【解决方案2】:

    你可以这样做(HTML):

    <button ng-click="value = { 'on': 'off', 'off':'on'}[value]">On/Off</button>
    

    jsFiddle

    但它非常难看。我肯定会在范围上创建一个方法来更改状态,特别是如果它比仅切换两个值更复杂。

    但是,如果areaStatus 只是为了更改区域类,我认为您应该放弃它,而是根据您的模型状态更改类。像这样的:

    function Ctrl($scope) {
        $scope.state = 'on';
    
        $scope.changeState = function() {
            $scope.state = $scope.state === 'on' ? 'off' : 'on';
        }
    }
    
    ...
    
    <area ng-class="{'on': state, 'off': !state }">
    

    我使用了“开”和“关”,但它应该是对您的模型有意义的值。

    【讨论】:

    • 当三元运算符$scope.state = 'on' ? 'off' : 'on'; 不起作用时,我感到很困惑。我错过了额外的$scope.state ===。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2011-04-27
    • 1970-01-01
    • 1970-01-01
    • 2011-12-28
    • 2016-04-05
    • 2017-01-08
    • 2020-08-01
    • 1970-01-01
    相关资源
    最近更新 更多