Angular выражение n-класса if-else
Я использую angularjs ng-класс следующим образом:
<div class="bigIcon" data-ng-click="PickUp()"
ng-class="{first:'classA', second:'classB', third:'classC', fourth:'classC'}[call.State]"/>
и я подумал, могу ли я использовать выражение if-else, могу ли я сделать что-то похожее на это:
<div class="bigIcon" data-ng-click="PickUp()"
ng-class="{first:'classA', second:'classB', else:'classC'}[call.State]"/>
означает, что если call.State
отличается от first
или second
, используйте classC
и не указывать каждое значение.
спасибо!
Ответы
Ответ 1
Используйте вложенные операторы if-then inline (Тернарные операторы)
<div ng-class=" ... ? 'class-1' : ( ... ? 'class-2' : 'class-3')">
, например:
<div ng-class="apt.name.length >= 15 ? 'col-md-12' : (apt.name.length >= 10 ? 'col-md-6' : 'col-md-4')">
...
</div>
И убедитесь, что читайте ваши коллеги:)
Ответ 2
вы можете попробовать с помощью такой функции:
<div ng-class='whatClassIsIt(call.State)'>
Затем поместите свою логику в функцию:
$scope.whatClassIsIt= function(someValue){
if(someValue=="first")
return "ClassA"
else if(someValue=="second")
return "ClassB";
else
return "ClassC";
}
Я сделал скрипку с примером: http://jsfiddle.net/DotDotDot/nMk6M/
Ответ 3
У меня была ситуация, когда мне нужно было два оператора if, которые могли бы быть истинными, а "else" или "default", если бы они не были истинными, не уверен, что это улучшение в ответ Jossef, но мне показалось, что он чище:
ng-class="{'class-one' : value.one , 'class-two' : value.two}" class="else-class"
Если value.one и value.two истинны, они имеют прецедент над классом .else
Ответ 4
Ясно, что! Мы можем создать функцию для возврата имени класса CSS с полным примером.
![введите описание изображения здесь]()
CSS
<style>
.Red {
color: Red;
}
.Yellow {
color: Yellow;
}
.Blue {
color: Blue;
}
.Green {
color: Green;
}
.Gray {
color: Gray;
}
.b{
font-weight: bold;
}
</style>
JS
<script>
angular.module('myapp', [])
.controller('ExampleController', ['$scope', function ($scope) {
$scope.MyColors = ['It is Red', 'It is Yellow', 'It is Blue', 'It is Green', 'It is Gray'];
$scope.getClass = function (strValue) {
if (strValue == ("It is Red"))
return "Red";
else if (strValue == ("It is Yellow"))
return "Yellow";
else if (strValue == ("It is Blue"))
return "Blue";
else if (strValue == ("It is Green"))
return "Green";
else if (strValue == ("It is Gray"))
return "Gray";
}
}]);
</script>
И затем
<body ng-app="myapp" ng-controller="ExampleController">
<h2>AngularJS ng-class if example</h2>
<ul >
<li ng-repeat="icolor in MyColors" >
<p ng-class="[getClass(icolor), 'b']">{{icolor}}</p>
</li>
</ul>
<hr/>
<p>Other way using : ng-class="{'class1' : expression1, 'class2' : expression2,'class3':expression2,...}"</p>
<ul>
<li ng-repeat="icolor in MyColors">
<p ng-class="{'Red':icolor=='It is Red','Yellow':icolor=='It is Yellow','Blue':icolor=='It is Blue','Green':icolor=='It is Green','Gray':icolor=='It is Gray'}" class="b">{{icolor}}</p>
</li>
</ul>
Вы можете обратиться к полной кодовой странице ng-class, если пример
Ответ 5
Вышеупомянутые решения для меня не работали для классов с фоновыми изображениями. Я создал класс по умолчанию (тот, который вам нужен в другом) и установите class= 'defaultClass', а затем ng- class= "{class1: abc, class2: xyz}"
<span class="booking_warning" ng-class="{ process_success: booking.bookingStatus == 'BOOKING_COMPLETED' || booking.bookingStatus == 'BOOKING_PROCESSED', booking_info: booking.bookingStatus == 'INSTANT_BOOKING_REQUEST_RECEIVED' || booking.bookingStatus == 'BOOKING_PENDING'}"> <strong>{{booking.bookingStatus}}</strong> </span>
P.S: классы, которые находятся в состоянии, должны переопределять класс по умолчанию i.e, отмеченный как! important
Ответ 6
Обходной путь - манипулировать модельной переменной только для переключения ng-класса:
Например, я хочу переключить класс в соответствии с состоянием моего списка:
1) Всякий раз, когда мой список пуст, я обновляю свою модель:
$scope.extract = function(removeItemId) {
$scope.list= jQuery.grep($scope.list, function(item){return item.id != removeItemId});
if (!$scope.list.length) {
$scope.liststate = "empty";
}
}
2) Всякий раз, когда мой список не пуст, я устанавливаю другое состояние
$scope.extract = function(item) {
$scope.list.push(item);
$scope.liststate = "notempty";
}
3) Когда мой список никогда не затрагивается, я хочу дать еще один класс (здесь начинается страница):
$scope.liststate = "init";
3) Я использую эту дополнительную модель для своего ng-класса:
ng-class="{'bg-empty': liststate == 'empty', 'bg-notempty': liststate == 'notempty', 'bg-init': liststate = 'init'}"
Ответ 7
Это лучший и надежный способ сделать это.
Вот простой пример, и после этого вы можете разработать свою собственную логику:
//In .ts
public showUploadButton:boolean = false;
if(some logic)
{
//your logic
showUploadButton = true;
}
//In template
<button [class]="showUploadButton ? 'btn btn-default': 'btn btn-info'">Upload</button>