私のルート間に素晴らしいアニメーションがあり、データがロードされた後にのみコンポーネントを表示するためにすべてのコンポーネントにワープを追加しました。 :コンポーネントのデータがサービスからロードされた後にルータ間でアニメーションを開始する方法
私のコンポーネントHTMLファイル:
<div *ngIf="isDataAvailable">
...my component html template...
</div>
と、これは私のTSファイルである:私のルートTSファイル内
isDataAvailable:boolean = false;
ngOnInit() {
this.subscription = this.clientsService.getClients().subscribe(
(result:any) => {
this.data = result.clients;
this.isDataAvailable = true;
}
);
}
私はこのアニメーションの設定を持っている:
import { customTransition } from './custom-transition.animation';
@Component({
selector: 'app-master',
templateUrl: './master.component.html',
styleUrls: [
'./master.component.css',
],
animations: [customTransition()],
encapsulation: ViewEncapsulation.None
})
、これはルート・ファイルのための私のHTMLテンプレートです
<ng2-page-transition [animation]="customAnimation">
<div [@ng2ElementState]="customAnimation.state">
<router-outlet></router-outlet>
</div>
</ng2-page-transition>
私の問題は今、いくつかのコンポーネントが高速にロードされ、一部がゆっくりなぜなら、彼らが持っているデータをロードしていると、これは罰金であるということですユーザーがゆっくりと読み込んでいるものにはアニメーションが表示されず、準備ができたらコンポーネントだけが表示されます。
データがロードされてから、 をロードした後、アニメーションを開始したいと思うかもしれません。おそらく、コンポーネントの準備が整う前に、いくつかのプリローダーを表示することさえできます。
ありがとうございました!
EDIT:
これは私のcustomTransition.animation.tsファイルです:アニメーションは、ルート・ファイル内のコンポーネントではなく内にある必要があります
//custom-transition.animation.ts
import {trigger, state, animate, style, transition, AnimationEntryMetadata} from '@angular/core';
export function customTransition():AnimationEntryMetadata {
return slideOutAndIn();
}
function slideOutAndIn():AnimationEntryMetadata {
return trigger('ng2ElementState', [
state('leave', style({
position:'inherit',
display:'block',
width:'100%'
})),
state('enter', style({
position:'inherit',
display:'block',
width:'100%'
})),
transition('* => enter', [
style({
transform: 'translateY(10%)',
opacity: 0
}),
animate('0.5s ease-in-out', style({
transform: 'translateY(0%)',
opacity: 1
}))
]),
transition('* => leave', [
style({
transform: 'translateY(0%)',
opacity: 0
}),
animate('0.5s ease-in-out', style({
transform: 'translateY(-10%)',
opacity: 0
}))
]),
]);
}
あなたの目的のために、アニメーショントリガーはルータのアウトレットの内部コンポーネントに含まれるべきだと思います。いずれかの方法。内部コンポーネントの 'ngOnInit'がいつ廃棄されたかを知り、それをアニメーションのトリガとして含めるときに、オブザーバブルを使用してサービスを行うことができます。おそらく、より簡単な解決策がマスターから提案されるでしょう。どれどれ。興味ある。 – Sam
@Sam私はあなたが正しいと思うかもしれません。それは私のために働くコンポーネントの中でアニメーションをトリガーする場合、私は質問にアニメーションを追加します - 私のコンポーネントの中でそれを実行する方法を教えてください?私はangle2で少し新しいです... –
私は家に到着しました。遅いですか?大丈夫だ?私が私にそれを知らせるのを助けることができるなら:) – Sam