Encontrei problemas ao aplicar classes dentro dos elementos da tabela quando já havia uma classe aplicada a toda a tabela (por exemplo, uma cor aplicada às linhas ímpares <myClass tbody tr:nth-child(even) td>
). Parece que, quando você inspeciona o elemento com as Ferramentas do desenvolvedor , o element.style
estilo não é atribuído. Então, em vez de usar ng-class
, tentei usar ng-style
e, nesse caso, o novo atributo CSS aparece dentro element.style
. Este código funciona muito bem para mim:
<tr ng-repeat="element in collection">
[...amazing code...]
<td ng-style="myvar === 0 && {'background-color': 'red'} ||
myvar === 1 && {'background-color': 'green'} ||
myvar === 2 && {'background-color': 'yellow'}">{{ myvar }}</td>
[...more amazing code...]
</tr>
Myvar é o que estou avaliando e, em cada caso, aplico um estilo a cada um, <td>
dependendo do valor myvar , que substitui o estilo atual aplicado pela classe CSS para toda a tabela.
ATUALIZAR
Se você deseja aplicar uma classe à tabela, por exemplo, ao visitar uma página ou em outros casos, você pode usar esta estrutura:
<li ng-class="{ active: isActive('/route_a') || isActive('/route_b')}">
Basicamente, o que precisamos para ativar uma classe ng é a classe a ser aplicada e uma declaração verdadeira ou falsa. True aplica a classe e false não. Portanto, temos aqui dois cheques da rota da página e um OR entre eles, por isso, se estamos em /route_a
OR estamos route_b
, o ativo será aplicado classe.
Isso funciona apenas com uma função lógica à direita que retorna verdadeiro ou falso.
Portanto, no primeiro exemplo, o estilo ng é condicionado por três instruções. Se todos eles forem falsos, nenhum estilo será aplicado, mas, seguindo a nossa lógica, pelo menos um será aplicado; portanto, a expressão lógica verificará qual comparação de variáveis é verdadeira e, como uma matriz não vazia é sempre verdadeira, deixou uma matriz como retorno e com apenas uma verdadeira, considerando que estamos usando OR para toda a resposta, o estilo restante será aplicado.
A propósito, esqueci de fornecer a função isActive ():
$rootScope.isActive = function(viewLocation) {
return viewLocation === $location.path();
};
NOVA ATUALIZAÇÃO
Aqui você tem algo que acho realmente útil. Quando você precisa aplicar uma classe dependendo do valor de uma variável, por exemplo, um ícone dependendo do conteúdo da div
, você pode usar o seguinte código (muito útil em ng-repeat
):
<i class="fa" ng-class="{ 'fa-github' : type === 0,
'fa-linkedin' : type === 1,
'fa-skype' : type === 2,
'fa-google' : type === 3 }"></i>
Ícones do Font Awesome