угловой НГ-класс, если еще выражение
Я использую angularjs ng-class следующим образом:
<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 и не указывать каждое значение.
спасибо!
8 ответов:
используйте вложенные встроенные операторы if-then (Тернарные Операторы)
<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>и читается вашими коллегами :)
вы можете попробовать, используя такую функцию:
<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/
У меня была ситуация, когда мне нужны были два утверждения "Если", которые могли бы быть как истинными, так и "иначе" или по умолчанию, если ни одно из них не было истинным, не уверен, что это улучшение ответа Йоссефа, но мне показалось чище:
ng-class="{'class-one' : value.one , 'class-two' : value.two}" class="else-class"где значение.один и значение.два верны, они берут прецедент над своим .остальное-класс
явно! Мы можем сделать функцию для возврата имени класса 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-класс, если пример
вышеуказанные решения не работали для меня для классов с фоновыми изображениями как-то. Я создал класс по умолчанию (тот, который вам нужен в else) и установил 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: классы, которые находятся в состоянии, должны переопределить класс по умолчанию, т. е. помеченный как !важно
Это самый лучший и надежный способ сделать это. Вот простой пример, и после этого вы можете развивать свою логику:
//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>
мой обходной путь состоит в том, чтобы манипулировать переменной модели только для переключения 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) I используйте эту дополнительную модель на моем ng-классе:
ng-class="{'bg-empty': liststate == 'empty', 'bg-notempty': liststate == 'notempty', 'bg-init': liststate = 'init'}"
вы можете попробовать этот метод:
</p><br /><br /> <p>ng-class="{test: obj.value1 == 'someothervalue' || obj.value2 == 'somethingelse'}<br /><br /><br /> ng-class="{test: obj.value1 == 'someothervalue' || obj.value2 == 'somethingelse'}вы можете получить полную информацию от здесь.

Comments