Eu queria saber se existe uma maneira angular de exibir condicionalmente conteúdo que não seja o ng-show etc. Por exemplo, no backbone.js, eu poderia fazer algo com conteúdo embutido em um modelo como:
<% if (myVar === "two") { %> show this<% } %>
mas em angular, pareço estar limitado a mostrar e ocultar coisas envoltas em tags html
<p ng-hide="true">I'm hidden</p>
<p ng-show="true">I'm shown</p>
Qual é a maneira recomendada em angular de mostrar e ocultar condicionalmente o conteúdo embutido em angular usando {{}} em vez de agrupar o conteúdo em tags html?
angularjs
if-statement
ternary-operator
user1469779
fonte
fonte
Respostas:
EDIT: A resposta de 2Toad abaixo é o que você está procurando! Voto positivo nessa coisa
Se você estiver usando Angular <= 1.1.4, então esta resposta fará:
Mais uma resposta para isso. Estou postando uma resposta separada, porque é mais uma tentativa "exata" de uma solução do que uma lista de possíveis soluções:
Aqui está um filtro que fará um "imediato se" (aka iif):
e pode ser usado assim:
fonte
O Angular 1.1.5 adicionou suporte para operadores ternários:
fonte
myVar
somente se for falso? (ou seja, como posso aninhar variáveis na expressão?) Tentei com{{myVar === "two" ? "it's true" : {{myVar}}}}
mas não funciona.myVar
propriedade não precisa ser envolvida em chaves adicionais, ela já está dentro de uma expressão. Tente{{myVar === "two" ? "it's true" : myVar}}
Milhares de maneiras de esfolar esse gato. Sei que você está perguntando entre {{}} especificamente, mas para outros que vêm aqui, acho que vale a pena mostrar algumas das outras opções.
função no seu escopo $ (IMO, esta é sua melhor aposta na maioria dos cenários):
ng-show e ng-hide, é claro:
ngSwitch
Um filtro personalizado, como sugeriu Bertrand. (esta é sua melhor escolha se você tiver que fazer a mesma coisa repetidamente)
Ou uma diretiva personalizada:
Pessoalmente, na maioria dos casos, eu usaria uma função no meu escopo, ela mantém a marcação bastante limpa e é rápida e fácil de implementar. A menos que você faça a mesma coisa repetidas vezes, nesse caso, eu iria com a sugestão de Bertrand e criaria um filtro ou possivelmente uma diretiva, dependendo das circunstâncias.
Como sempre, o mais importante é que sua solução seja fácil de manter e esperamos que seja testável. E isso vai depender completamente da sua situação específica.
fonte
Estou usando o seguinte para definir condicionalmente a classe attr quando a classe ng não puder ser usada (por exemplo, ao estilizar SVG):
A mesma abordagem deve funcionar para outros tipos de atributos.
(Eu acho que você precisa estar no mais recente angular instável para usar ng-attr-, atualmente estou no 1.1.4)
Publiquei um artigo sobre como trabalhar com o AngularJS + SVG que fala sobre isso e questões relacionadas. http://www.codeproject.com/Articles/709340/Implementing-a-Flowchart-with-SVG-and-AngularJS
fonte
Para verificar um conteúdo variável e ter um texto padrão, você pode usar:
fonte
Se eu te entendi bem, acho que você tem duas maneiras de fazê-lo.
Primeiro você pode tentar o ngSwitch e a segunda maneira possível seria criar seu próprio filtro . Provavelmente o ngSwitch é a abordagem certa, mas se você deseja ocultar ou mostrar conteúdo embutido, basta usar o filtro {{}}.
Aqui está um violino com um filtro simples como exemplo.
fonte
A biblioteca de interface do usuário angular possui a diretiva interna ui-if para a condição no modelo / Visualizações até a interface angular 1.1.4
Exemplo: Suporte na interface do usuário angular até a interface do usuário 1.1.4
ng-se disponível em toda a versão angular após 1.1.4
se você tiver algum dado na variável array, somente a div aparecerá
fonte
ui-if
foi removido, pelo menos a partir última versão angular-ui mas desde angular 1.1.5 você temng-if
(de este comentário )Portanto, com o Angular 1.5.1 (tinha dependência de aplicativo existente em algumas outras dependências da pilha MEAN, é por isso que não estou usando o 1.6.4)
Isso funciona para mim como o OP dizendo
{{myVar === "two" ? "it's true" : "it's false"}}
fonte
se você quiser exibir "Nenhum" quando o valor for "0", poderá usar como:
ou verdadeiro falso em js angulares
fonte
Funciona mesmo em situações exóticas:
fonte
Vou jogar o meu na mistura:
https://gist.github.com/btm1/6802312
isso avalia a instrução if uma vez e não adiciona nenhum ouvinte de observação, mas você pode adicionar um atributo adicional ao elemento que possui o conjunto se chamado wait-for = "somedata.prop" e aguardará a definição desses dados ou propriedades antes avaliando a instrução if uma vez. esse atributo adicional pode ser muito útil se você estiver aguardando dados de uma solicitação XHR.
fonte