Operator trójdzielny w szablonach AngularJS
Jak zrobić Trójnik z AngularJS (w szablonach)?
Byłoby miło użyć niektórych atrybutów html (klas i stylów) zamiast tworzyć i wywoływać funkcję kontrolera.
7 answers
Aktualizacja : Angular 1.1.5 dodał Operator trójkowy, więc teraz możemy po prostu napisać
<li ng-class="$first ? 'firstRow' : 'nonFirstRow'">
Jeśli używasz wcześniejszej wersji Angular, masz dwie opcje:]}
(condition && result_if_true || !condition && result_if_false)
{true: 'result_if_true', false: 'result_if_false'}[condition]
Pozycja 2. powyżej tworzy obiekt o dwóch właściwościach. Składnia array służy do wybrania właściwości o nazwie true lub właściwości o nazwie false i zwrócenia powiązanej wartości.
Np.,
<li class="{{{true: 'myClass1 myClass2', false: ''}[$first]}}">...</li>
or
<li ng-class="{true: 'myClass1 myClass2', false: ''}[$first]">...</li>
$pierwszy jest ustawia się na true wewnątrz ng-repeat dla pierwszego elementu, więc powyższe będzie stosować klasy 'myClass1' i 'myClass2' tylko za pierwszym razem przez pętlę.
Z ng-class jest jednak łatwiejszy sposób: ng-class przyjmuje wyrażenie, które musi oceniać do jednego z następujących:
- łańcuch nazw klas rozdzielonych spacjami
- tablica nazw klas
- Mapa / obiekt nazw klas do wartości logicznych.
Przykład 1) podano powyżej. Oto przykład 3, który moim zdaniem czyta się znacznie lepiej:
<li ng-class="{myClass: $first, anotherClass: $index == 2}">...</li>
Po raz pierwszy przez pętlę ng-repeat dodaje się klasę myClass. Trzeci raz przez ($index zaczyna się od 0), Klasa anotherClass jest dodawana.
Ng-style pobiera wyrażenie, które musi ocenić do mapy/obiektu nazw stylów CSS do wartości CSS. Np.,
<li ng-style="{true: {color: 'red'}, false: {}}[$first]">...</li>
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-10-28 11:40:00
Update: Angular 1.1.5 dodał operator trójkowy, ta odpowiedź jest poprawna tylko dla wersji poprzedzających 1.1.5. W przypadku wersji 1.1.5 i późniejszych zobacz aktualnie akceptowaną odpowiedź.
Before Angular 1.1.5:
Forma trójnika w angularjs to:
((condition) && (answer if true) || (answer if false))
Przykładem może być:
<ul class="nav">
<li>
<a href="#/page1" style="{{$location.path()=='/page2' && 'color:#fff;' || 'color:#000;'}}">Goals</a>
</li>
<li>
<a href="#/page2" style="{{$location.path()=='/page2' && 'color:#fff;' || 'color:#000;'}}">Groups</a>
</li>
</ul>
Lub:
<li ng-disabled="currentPage == 0" ng-click="currentPage=0" class="{{(currentPage == 0) && 'disabled' || ''}}"><a> << </a></li>
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-03-23 09:17:38
Dla tekstów w szablonie kątowym (userType
jest właściwością $scope, podobnie jak $scope.userType):
<span>
{{userType=='admin' ? 'Edit' : 'Show'}}
</span>
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-10-14 11:46:49
Do tej pory wszyscy dowiedzieliśmy się wersji 1.1.5 jest wyposażony w odpowiedni trójnik w funkcji $parse
, więc użyj tej odpowiedzi jako przykład filtrów:
angular.module('myApp.filters', [])
.filter('conditional', function() {
return function(condition, ifTrue, ifFalse) {
return condition ? ifTrue : ifFalse;
};
});
A następnie użyj go jako
<i ng-class="checked | conditional:'icon-check':'icon-check-empty'"></i>
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-05-26 20:46:54
Oto jest: operator trójkowy został dodany do parsera kątowego w 1.1.5! Zobacz changelog
Oto fiddle pokazujący nowy operator trójkowy używany w dyrektywie klasy ng.
ng-class="boolForTernary ? 'blue' : 'red'"
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-05-23 08:19:34
Chociaż można używać składni condition && if-true-part || if-false-part
-w starszych wersjach angular, zwykły Operator trójkowy {[1] } jest dostępny w Angular 1.1.5 i późniejszych .
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-05-23 08:56:20
<body ng-app="app">
<button type="button" ng-click="showme==true ? !showme :showme;message='Cancel Quiz'" class="btn btn-default">{{showme==true ? 'Cancel Quiz': 'Take a Quiz'}}</button>
<div ng-show="showme" class="panel panel-primary col-sm-4" style="margin-left:250px;">
<div class="panel-heading">Take Quiz</div>
<div class="form-group col-sm-8 form-inline" style="margin-top: 30px;margin-bottom: 30px;">
<button type="button" class="btn btn-default">Start Quiz</button>
</div>
</div>
</body>
Przycisk włącza i zmienia nagłówek przycisku oraz Pokazuje / Ukrywa panel div. Zobacz Plunkr
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-04-02 17:06:43