Estou usando o Material 2 para adicionar md-raised-button
. Desejo aplicar esta diretiva apenas se certa condição se tornar verdadeira.
Por exemplo:
<button md-raised-button="true"></button>
Outro exemplo: criei uma forma reativa dinâmica básica no plunker. Estou usando uma formArrayName
diretiva de forma reativa para uma série de controles. Quero aplicar a formArrayName
diretiva apenas se uma condição específica se tornar verdadeira, caso contrário, não adicione a formArrayName
diretiva.
Aqui está um link de êmbolo .
Respostas:
Não sei se você pode aplicar diretivas com base em uma condição, mas uma solução alternativa seria ter 2 botões e exibi-los com base em uma condição .
Editar: talvez isso seja útil.
fonte
Se você só precisa adicionar um atributo para acionar as regras CSS, pode usar o método a seguir: (isso não cria / destrói dinamicamente uma diretiva)
<button [attr.md-raised-button]="condition ? '' : null"></button>
Aplicado o mesmo ao seu êmbolo: garfo
Atualizar:
Como
condition ? '' : null
funciona como o valor:Quando é a string vazia (
''
), torna-seattr.md-raised-button=""
, quando énull
o atributo não existirá.Atualização: atualização do plunker: fork (problemas de versão corrigidos, observe que a questão foi originalmente baseada no angular 4)
fonte
Como já foi observado, isso não parece ser possível. Uma coisa que pode ser usada para evitar pelo menos alguma duplicação é
ng-template
. Isso permite que você extraia o conteúdo do elemento afetado pelangIf
ramificação.Se você, por exemplo, deseja criar um componente de menu hierárquico usando Angular Material:
Aqui, a diretiva aplicada condicionalmente é
matMenuTriggerFor
, que só deve ser aplicada a itens de menu com filhos. O conteúdo do botão é inserido em ambos os lugares viangTemplateOutlet
.fonte
Isso pode chegar tarde, mas é um método viável e elegante para aplicar uma diretiva condicionalmente.
Na classe de diretiva, crie a variável de entrada:
Ao aplicar a diretiva, defina a propriedade apply da variável de entrada:
No método da diretiva, verifique a variável this.options.apply e aplique a lógica da diretiva com base na condição:
fonte
Como outros também afirmaram,
directives
não pode ser aplicado dinamicamente.No entanto, se você quiser apenas alternar
md-button
o estilo de plano para elevado , entãofaria o truque. Plunker
fonte
Esta também pode ser uma solução:
[md-raised-button]="condition ? 'true' : ''"
Está funcionando para angular 4, iônico 3 assim:
[color]="condition ? 'primary' : ''"
ondecondition
é uma função que decide se esta é uma página ativa ou não. Todo o código se parece com isto:<button *ngFor="let page of ..." [color]="isActivePage(page) ? 'primary' : ''">{{ page.title }}</button>
fonte
Atualmente, existe uma
NO
maneira de aplicar condicionalmente uma diretiva a um componente. Isso não é suportado. Os componentes que você criou podem ser adicionados ou removidos condicionalmente.Já existe um problema criado para o mesmo com
angular2
, então deve ser o caso com angular4 também.Alternativamente, você pode escolher a opção com ng-if
fonte
Não consegui encontrar uma boa solução existente, então criei minha própria diretiva que faz isso.
Então seu html:
<div dynamic-attr="{{hasMargin: 'margin-left' ? ''}}"></div>
fonte
@HostBinding('attr.dynamic-attr') @Input('dynamic-attr') attr: string;
vez de ngOnInit + ElementRef.Talvez ajude alguém.
No exemplo abaixo, tenho o
my-button.component.html
e desejo aplicar a*appHasPermission
diretiva ao<button>
somente se orole
atributo estiver definido.Dessa forma, você não duplica o
<button>
código.fonte
Sim, é possível.
página html com diretiva appActiveAhover :)
diretriz
fonte
Passar
null
para a diretiva remove isso!fonte
Usar
NgClass
exemplo de condição verdadeira:
ou uma função booleana
exemplo completo:
Se você quiser uma classe padrão:
fonte
md-raised-button
atributo como falso)Tive outra ideia sobre o que você poderia fazer.
Você pode armazenar o html que deseja substituir em uma variável como uma string e, em seguida, adicionar / remover a diretiva como desejar, usando o
bypassSecurityTrustHtml
método do DomSanitizer .I não resulta em uma solução limpa, mas pelo menos você não precisa repetir o código.
fonte
Em 18 de janeiro de 2019, foi assim que adicionei uma diretiva condicionalmente no Angular 5 e acima. Eu precisava mudar a cor do
<app-nav>
componente com base emdarkMode
. Se a página estava no modo escuro ou não.Isso funcionou para mim:
<app-nav [color]="darkMode ? 'orange':'green'"></app-nav>
Espero que isso ajude alguém.
EDITAR
Isso altera o valor de um atributo (cor) com base em uma condição. Acontece que a cor é definida por meio de uma diretiva. Portanto, quem estiver lendo isso, não se confunda, isso não é aplicar uma diretiva condicionalmente (ou seja, o que significa adicionar ou remover uma diretiva ao dom com base em uma condição)
fonte