12

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

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

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

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

4

2 回答 2

18

你可以这样做(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 }">

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

于 2013-08-28T21:07:32.953 回答
12

目前还不太清楚你想要什么或者你为什么要避免想要一个功能,但是我会去做我认为你想做的事情的一种方式:

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

这是一个显示它的小提琴以及下面的代码片段。

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您只需简单地翻转 的booleanareaStatusng-class你可以传入一个对象。red和将green是您要申请的课程。当以下表达式正确时,它们将被应用。

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

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

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

于 2013-08-28T21:01:15.090 回答