angular - Kunde inte bearbeta animationer - returnerade noll element
Animationer slutade fungera när jag skapade en tjänst för mina data. Det verkar bero på att när sidan laddas initialt finns det inga element i ng-repeat (eftersom den hämtar data). Verkar vara ett liknande fall som DET HÄR och DET HÄR:
Fel :
Kan inte bearbeta animationer på grund av följande misslyckade triggerövergångar @listAnimation har misslyckats på grund av: -
query(":enter")returnerade noll element. (Användquery(":enter", { optional: true })om du vill tillåta detta.)
Animation:
trigger('listAnimation', [
transition('* => *', [
query(':enter', style({ opacity: 0}), { optional: true }),
query(':enter', stagger('150ms', [
animate('.5s ease-in', keyframes([
style({ opacity: 0, /*transform: 'translateY(-75px)',*/ offest: 0}),
style({ opacity: .5, /*transform: 'translateY(35px)',*/ offest: .3}),
style({ opacity: 1, /*transform: 'translateY(0px)',*/ offest: 1})
]))
]))
])
])
HTML :
<div [@listAnimation]>
<div *ngFor="let member of members" class="member-card">
member info goes here...
</div>
</div>
Nu, innan du säger "sätt in { optional: true } som felmeddelandet säger"... jag gjorde det - det tar bort felmeddelandet, men får inte själva animationen att fungera:
trigger('listAnimation', [
transition('* => *', [
query(':enter', style({ opacity: 0}), { optional: true }),
query(':enter', stagger('150ms', [
animate('.5s ease-in', keyframes([
style({ opacity: 0, /*transform: 'translateY(-75px)',*/ offest: 0}),
style({ opacity: .5, /*transform: 'translateY(35px)',*/ offest: .3}),
style({ opacity: 1, /*transform: 'translateY(0px)',*/ offest: 1})
]))
]), {optional: true})
])
])
Tänk på att allt detta fungerade innan datan togs ut från appkomponenten. Datan finns där och appen fungerar som vanligt, bara denna animation fungerar inte längre.
Svar #1
trigger('routeAnimations', [
transition('* <=> *', [
style({ position: 'relative' }),
query(':enter, :leave', [
style({
position: 'absolute',
top: 0,
left: 0,
width: '100%',
}),
]),
query(':enter', [style({ left: '-100%' })]),
query(':leave', animateChild(), { optional: true }), //adding here solved my problem
group([
query(':leave', [
animate('300ms ease-out', style({ left: '100%', opacity: 0 })),
]),
query(':enter', [animate('300ms ease-out', style({ left: '0%' }))]),
]),
]),
])
Svar #2
Se till att visa din listcontainer bara när members-arrayen inte är tom. På så sätt triggas animationen endast när det finns något i din lista.
<div [@listAnimation] *ngIf="members.length > 0">
<div *ngFor="let member of members" class="member-card">
member info goes here...
</div>
</div>
