transclude multiple conditions attribute angularjs conditional ng-class

multiple - Condiciones mĂșltiples de AngularJS clase ng con operador OR



ng if multiple conditions angular 6 (4)

El HTML seguirá siendo el mismo.

<a href="" ng-click="addFavorite(myfav.id);favorite=!favorite"> <i ng-class="{''fa-star-o'':!favorite,''fa-star'':favorite||fav===myfav.id}"></i> </a>

Pero el orden en que las clases están presentes en su archivo CSS importará

La clase fa-star se aplicará cuando fav===myfav.id true o fav===myfav.id devuelva true.

Por lo tanto, si después de hacer clic una vez, supongamos que fav===myfav.id devuelve true y continúa devolviendo true, incluso al hacer clic nuevamente, la clase fa-star se aplicará siempre desde ese momento.

Si por defecto el favorite es falso, entonces fa-star-o se aplicará cuando la plantilla se cargue por primera vez, pero después del primer clic, cuando el favorite se establezca en verdadero, se eliminará. Luego, en el segundo clic, cuando el favorite se establece en falso otra vez, fa-star-o se aplicará, pero en este caso, la clase fa-star también se aplicará como fa===myfav.id condición fa===myfav.id siendo verdadera ( Suponiendo que ese sea el caso).

Por lo tanto, deberá priorizar qué clase debe aplicarse cuando se encuentre presente en el elemento, ya que puede surgir un caso cuando ambas clases pueden estar presentes al mismo tiempo en el elemento. Por ejemplo, si la clase fa-star-o tiene mayor prioridad, entonces colóquela debajo de fa-star en su CSS, como por ejemplo

.fa-star { border: 1px solid #F00; } .fa-star-o { border: 1px solid #000; }

Consulte la demostración de trabajo en http://plnkr.co/edit/Dh59KUU41uWpIkHIaYrO?p=preview

Intento descubrir la buena sintaxis para agregar clases según los valores angulares. Quiero activar una clase con respecto a 2 condiciones (una en los cambios de usuario en vivo y otra en la carga de datos) con un operador OR.

Aquí está la línea:

<a href="" ng-click="addFavorite(myfav.id);favorite=!favorite"> <i class="fa orange" ng-class="{''fa-star'': (favorite || (fav==myfav.id)), ''fa-star-o'': !favorite}"></i> </a>

Probé algunos códigos diferentes como este:

ng-class="{''fa-star'': favorite, ''fa-star'': (fav==myfav.id), ''fa-star-o'': !favorite}"

Sin ningún éxito. ¿Puede alguien ayudarme a encontrar la buena sintaxis?


Prueba esto.

<a href="" ng-click="addFavorite(myfav.id);favorite=!favorite"> <i class="fa orange" ng-class="{''fa-star'': favorite || fav==myfav.id, ''fa-star-o'': !favorite}"></i>

No hace falta los soportes.


Puedes usar expresión con ng-class

<i class="fa orange" ng-class="favorite || fav == myfav.id ? ''fav'' : ''no-fav''"></i>


Una vez que tenga que agregar algo de lógica detrás ng-class , siempre es mejor seguir usando el controlador para hacerlo. Puede hacerlo de dos formas: sintaxis JSON (igual que en su HTML, solo más legible) o obviamente JavaScript.

Sintaxis HTML (JSON)

HTML

<i ng-class="getFavClassIcon(myFav.id)"></i>

JS

$scope.getFavClassIcon= function (favId) { return { ''fa-star-o'' : !$scope.favorite, ''fa-star'' : $scope.favorite || $scope.fav === favId }; };

Buena declaración IF antigua (JavaScript)

HTML

<i ng-class="getFavClassIcon(myFav.id)"></i>

JS

$scope.getFavClassIcon= function (favId) { if (!$scope.favorite) { return ''fa-star-o''; } else if ($scope.favorite) { // obviously you can use OR operator here return ''fa-star''; } else if ($scope.fav === favId) { return ''fa-star''; } };