我有一个按钮,点击它会显示/隐藏某个区域。
button(ng-click="areaStatus='on'")
.area(ng-class="areaStatus")
我不想只使用ng-show / ng-hide然后将其分配给布尔areaStatus,但我想要更复杂的事情,如开/关/隐藏/透明/无论如何。
有没有办法在点击时在'on'和'off'之间切换areaStatus而不必为它编写函数,只是使用内联表达式?
答案 0 :(得分:18)
你可以这样做(HTML):
<button ng-click="value = { 'on': 'off', 'off':'on'}[value]">On/Off</button>
但它非常难看。我肯定会在范围上创建一个方法来改变状态,特别是如果它比仅仅切换两个值更复杂。
但是,如果areaStatus
只是为了更改区域类,我认为你应该删除它,而是相应地将类更改为模型状态。像这样:
function Ctrl($scope) {
$scope.state = 'on';
$scope.changeState = function() {
$scope.state = $scope.state === 'on' ? 'off' : 'on';
}
}
...
<area ng-class="{'on': state, 'off': !state }">
我使用'on'和'off',但它应该是对你的模型有意义的值。
答案 1 :(得分:12)
不太清楚你想要的是什么,或者你为什么要避免想要一个功能,但这是一种我想做你想做的事情的方式:
<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以及下面的代码段。
var myModule = angular.module('myModule', []);
myModule.controller('myController', function ($scope) {
$scope.areaStatus = false;
});
&#13;
.red {
color:red;
}
.green {
color:green;
}
&#13;
<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>
&#13;
在ng-click
内,您只需翻转boolean
的{{1}}值。使用areaStatus
,您可以传入一个对象。 ng-class
和red
将是您要应用的类。当下面的表达式正确时,它们将被应用。
另一种方法是在你的班级中使用Angular的green
:
{{ }}
因此,如果<div class="{{areaStatus}}"> </div>
包含字符串areaStatus
,那么该类将在那里。但是你仍然需要一种方法来改变"hidden"
的值(在函数,多个按钮或复选框中)。