我有以下代码:
<!DOCTYPE html>
<html data-ng-app>
<head>
<title></title>
<style>
.menu-disabled-true {
color: gray;
}
.menu-disabled-false {
color: red;
}
.menu-disabled-green {
color: green;
}
</style>
</head>
<body >
<script src="angular.min.js"></script>
<script>
function DeathrayMenuController($scope) {
$scope.isDisabled = false;
$scope.stun = function() {
// stun the target, then disable menu to allow regeneration
if($scope.isDisabled == 'false'){
$scope.isDisabled = 'true';
}else if($scope.isDisabled == 'true'){
$scope.isDisabled = 'green';
}
};
}
</script>
<div ng-controller='DeathrayMenuController'>
<ul>
<li class='menu-disabled-{{isDisabled}}' ng-click='stun()'>Stun</li>
</ul>
</div></body>
</html>
现在,每当我点击 Stun <li>
时,我都希望它能根据控制器内的方法改变颜色。
有人可以帮助我理解它为什么不起作用吗?
答案 0 :(得分:1)
如果使用简单的HTML class
属性,angular只会对表达式求值一次(或从不)。
您必须使用ng-class
。像这样:
<li ng-class="{'menu-disabled-green': isDisabled == true,
'menu-disabled-true': isDisabled == false}" >Stun</li>
来自文档:
表达式为eval。评估结果可以是字符串 表示空格分隔的类名,数组或类的映射 名称为布尔值。在地图的情况下,的名称 值为truthy的属性将作为css类添加到 元件。
答案 1 :(得分:1)
问题是你正在比较字符串值和布尔值 将声明更改为'false'(字符串)
$scope.isDisabled = 'false';
$scope.stun = function() {
// stun the target, then disable menu to allow regeneration
if($scope.isDisabled == 'false'){
$scope.isDisabled = 'true';
}else if($scope.isDisabled == 'true'){
$scope.isDisabled = 'green';
}
};