Existe alguma maneira de fazer uma expressão para algo como ng-class
ser condicional?
Por exemplo, eu tentei o seguinte:
<span ng-class="{test: 'obj.value1 == \'someothervalue\''}">test</span>
O problema desse código é que, não importa o que obj.value1
seja, o teste de classe é sempre aplicado ao elemento. Fazendo isso:
<span ng-class="{test: obj.value2}">test</span>
Desde que obj.value2
não seja igual a um valor verdadeiro, a classe não será aplicada. Agora, posso solucionar o problema no primeiro exemplo, fazendo o seguinte:
<span ng-class="{test: checkValue1()}">test</span>
Onde a checkValue1
função se parece com isso:
$scope.checkValue1 = function() {
return $scope.obj.value === 'somevalue';
}
Só estou me perguntando se é assim que ng-class
deve funcionar. Também estou criando uma diretiva personalizada na qual gostaria de fazer algo semelhante a isso. No entanto, não consigo encontrar uma maneira de assistir a uma expressão (e talvez isso seja impossível e a razão pela qual funciona dessa maneira).
Aqui está um exemplo para mostrar o que quero dizer.
ng-class="'label-success': obj.value1 == 'Ready', 'label-warning': obj.value1 == 'On hold'}"
Respostas:
Sua primeira tentativa foi quase correta, deve funcionar sem as aspas.
Aqui está um plnkr .
A diretiva ngClass funcionará com qualquer expressão que avalie verdade ou falsidade, um pouco semelhante às expressões Javascript, mas com algumas diferenças, você pode ler aqui . Se sua condicional for muito complexa, você poderá usar uma função que retorne verdade ou falsey, como fez na terceira tentativa.
Apenas para complementar: você também pode usar operadores lógicos para formar expressões lógicas como
fonte
'
caso contrário, se você quiser adicionar mais classes ou se sua classe tiver hífens ou sublinhados, ela não funcionará.ng-class="{'test test-2: obj.value1 === 'value'}"
ng-class="{'test test-2': obj.value1 === 'value'}"
[class.test]="obj.value1 == 'someotervalue'"
.ng-class="{danger:!enabled || (type === 'WHEEL' && !isOnline) }
Usando a classe ng dentro de ng-repeat
Para cada status no task.status, uma classe diferente é usada para a linha.
fonte
JS angular fornece essa funcionalidade na diretiva de classe ng . Em que você pode colocar condição e também atribuir classe condicional. Você pode conseguir isso de duas maneiras diferentes.
Tipo 1
Neste código da classe serão aplicadas de acordo com o valor de status de valor
se o valor do status for 0 , aplique a classe um
se o valor do status for 1 , aplique a classe dois
se o valor do status for 2 , aplique a classe três
Tipo 2
Em qual classe será aplicada pelo valor do status
se o valor do status for 1 ou verdadeiro , ele adicionará a classe test_yes
se o valor do status for 0 ou false , ele adicionará a classe test_no
fonte
<div ng-class="{'Image' || 'image': 'image-icon', 'Video' || 'video' || 'aVideo' || 'bVideo' : 'video-icon'}[resource.type]"></div>
Vejo ótimos exemplos acima, mas todos começam com colchetes (json map). Outra opção é retornar um resultado com base na computação. O resultado também pode ser uma lista de nomes de classes css (não apenas mapa). Exemplo:
ou
Explicação: Se o status estiver ativo, a classe
enabled
será usada. Caso contrário, a classedisabled
será usada.A lista
[]
é usada para usar várias classes (não apenas uma).fonte
Existe um método simples que você pode usar com o atributo de classe html e a abreviação if / else. Não há necessidade de torná-lo tão complexo. Basta usar o seguinte método.
Feliz codificação, Nimantha Perera
fonte
Vou mostrar dois métodos pelos quais você pode aplicar dinamicamente a classe ng
Passo 1
Usando o operador ternário
Resultado
Se sua condição for verdadeira, a classe1 será aplicada ao seu elemento, caso contrário a classe2 será aplicada.
Desvantagem
Quando você tenta alterar o valor condicional no tempo de execução, a classe não muda de alguma forma. Então, vou sugerir que você vá para a etapa 2 se tiver requisitos como alteração dinâmica de classe.
Passo 2
Resultado
se sua condição corresponder ao valor1, a classe1 será aplicada ao seu elemento, se corresponder ao valor2, a classe2 será aplicada e assim por diante. E a mudança dinâmica de classe funcionará bem com isso.
Espero que isso ajude você.
fonte
A sintaxe angular é usar o operador : para executar o equivalente a um modificador if
Adicione a classe clearfix às linhas pares. No entanto, a expressão pode ser qualquer coisa que possamos ter em condições normais e deve ser avaliada como verdadeira ou falsa.
fonte
Usar a função com ng-class é uma boa opção quando alguém precisa executar uma lógica complexa para decidir a classe CSS apropriada.
http://jsfiddle.net/ms403Ly8/2/
HTML:
CSS:
JavaScript :
fonte
usa isto
por exemplo, se a condição for [2 == 2], os estados serão {true: '...', false: '...'}
fonte
Para Angular 2, use este
fonte
[ngClass]="['base-class', thread.isActive ? 'base-class--active' : '']"
ng-class
é uma diretiva dos AngularJs principais. No qual você pode usar "Sintaxe de seqüência de caracteres", "Sintaxe de matriz", "Expressão avaliada", "Operador ternário" e muitas outras opções descritas abaixo:ngClass usando sintaxe de string
Esta é a maneira mais simples de usar o ngClass. Você pode apenas adicionar uma variável Angular à ng-class e essa é a classe que será usada para esse elemento.
Exemplo de demonstração de ngClass usando sintaxe de string
ngClass usando sintaxe de matriz
Isso é semelhante ao método de sintaxe de cadeia, exceto que você pode aplicar várias classes.
ngClass usando expressão avaliada
Um método mais avançado de usar o ngClass (e o que você provavelmente mais usará) é avaliar uma expressão. A maneira como isso funciona é que, se uma variável ou expressão for avaliada
true
, você poderá aplicar uma determinada classe. Caso contrário, a classe não será aplicada.Exemplo de ngClass usando expressão avaliada
ngClass usando valor
Isso é semelhante ao método de expressão avaliado, exceto que você apenas pode comparar vários valores com a única variável.
ngClass usando o operador ternário
O operador ternário nos permite usar taquigrafia para especificar duas classes diferentes, uma se uma expressão for verdadeira e outra para falsa. Aqui está a sintaxe básica para o operador ternário:
Avaliando primeiro, último ou número específico
Se você estiver usando a
ngRepeat
diretiva e você deseja aplicar classes para ofirst
,last
ou um número específico na lista, você pode usar propriedades especiaisngRepeat
. Estes incluem$first
,$last
,$even
,$odd
, e alguns outros. Aqui está um exemplo de como usá-los.fonte