J'essaie de déclencher une transition liée à une propriété booléenne, mais cela ne semble pas se déclencher.
Voici une version réduite de mon déclencheur d'animation
trigger(
'trueFalseAnimation', [
transition('* => true', [
style({backgroundColor: '#00f7ad'}),
animate('2500ms', style({backgroundColor: '#fff'}))
]),
transition('* => false', [
style({backgroundColor: '#ff0000'}),
animate('2500ms', style({backgroundColor: '#fff'}))
])
]
)
HTML:
<div [@trueFalseAnimation]="model.someProperty">Content here</div>
Tester:
ngOnInit() {
setTimeout(() => {
this.model.someProperty = true;
setTimeOut(() => {
this.model.someProperty = false;
}, 5000);
}, 1000)
}
Le déclencheur ne se produit jamais lorsque le someProperty
change.
Comme test rapide, j'ai changé le déclencheur pour utiliser une chaîne et cela fonctionne
trigger(
'trueFalseAnimation', [
transition('* => Success', [
style({backgroundColor: '#00f7ad'}),
animate('2500ms', style({backgroundColor: '#fff'}))
]),
transition('* => Failed', [
style({backgroundColor: '#ff0000'}),
animate('2500ms', style({backgroundColor: '#fff'}))
])
]
)
Tester:
ngOnInit() {
setTimeout(() => {
this.model.someProperty = "Success";
setTimeOut(() => {
this.model.someProperty = "Failed";
}, 5000);
}, 1000)
}
Le deuxième exemple fonctionne très bien
Mes questions sont
trigger('isVisibleChanged', [
state('true' , style({ opacity: 1, transform: 'scale(1.0)' })),
state('false', style({ opacity: 0, transform: 'scale(0.0)' })),
transition('1 => 0', animate('300ms')),
transition('0 => 1', animate('900ms'))
])
J'ai le même problème. Je ne sais pas si les booléens sont pris en charge en tant que déclencheurs, mais la solution de contournement que j'ai trouvée consistait à définir une propriété de chaîne avec un getter pour renvoyer la valeur booléenne sous forme de chaîne. Quelque chose comme ça:
get somePropertyStr():string {
return this.someProperty.toString();
}
Vous devez ensuite lier votre animation à cette propriété somePropertyStr
.
Encore une fois, c'est une solution de contournement laide, la meilleure chose serait en mesure d'utiliser la valeur booléenne.
Un état est défini comme étant une chaîne, nous devons donc nous y tenir.
La manière la plus simple - mais la plus épineuse - basée sur votre code est la suivante:
<div [@trueFalseAnimation]="model.someProperty?.toString()">Content here</div>
Mais c'est assez horrible, donc c'est probablement mieux
<div [@trueFalseAnimation]="model.someProperty ? 'active' : 'inactive'">Content here</div>
<div [@trueFalseAnimation]="model.someProperty ? 'visible' : 'hidden'">Content here</div>
<div [@trueFalseAnimation]="model.someProperty ? 'up' : 'down'">Content here</div>
<div [@trueFalseAnimation]="model.someProperty ? 'left' : 'right'">Content here</div>
Le meilleur conseil ici serait d'utiliser un état correspondant à ce qu'il signifie réellement. Que signifie vraiment vrai et faux dans ce contexte de toute façon?
J'ai envisagé de créer un tuyau pour convertir un booléen, mais le seul avantage de cela serait de s'assurer que vous êtes cohérent avec vos chaînes d'état.