angle1の基本を見てください。angular2はまだ若いので、将来はまだ利用できない機能を実装する必要があります。 今のところ、リンクした最初のライブラリの素朴な実装を作成しました。
@Component({
selector: 'ptr-container',
styles: [`
:host {
display: block;
max-height: 50px;
overflow: auto;
}
`],
template: `
<section [hidden]="!inProgress">
refresh in progress ... (change it by your own loader)
</section>
<ng-content></ng-content>
`
})
export class PullToRefreshComponent {
private lastScrollTop:number = 0;
private isAtTop:boolean = false;
private element:any;
@Input('refresh') inProgress:boolean = false;
@Output() onPull:EventEmitter<any> = new EventEmitter<any>();
constructor(el:ElementRef) {
this.element = el.nativeElement;
}
private get scrollTop() { return this.element.scrollTop || 0; }
@HostListener('scroll')
@HostListener('touchmove')
onScroll() {
if(this.scrollTop <= 0 && this.lastScrollTop <= 0) {
if(this.isAtTop) this.onPull.emit(true);
else this.isAtTop = true;
}
this.lastScrollTop = this.scrollTop;
}
}
そして、ここでの基本的な使い方は、私は基本的なライブラリをテストしていませんが、これは作品べき
@Component({
selector: 'app',
template: `
<ptr-container (onPull)="onPull()" [refresh]="isInProgress"></ptr-container>
`
})
export class AppComponent {
isInProgress:boolean = false;
onPull() {
this.isInProgress = true;
}
}
です。 onScrollメソッドをデバウンスして、イベントエミッタをスパムしないようにする必要があります。
ご希望の場合はお手伝いします。
残念ながら、チュートリアル/フレームワークに関する質問は、StackOverflowの話題にはなりません。 –
@DavidMakogonそれを指摘していただきありがとうございます。関連リンク[here](http://stackoverflow.com/help/on-topic)をご覧ください。残念ながら、私はそのような一般的な質問をするための適切な場所を知らないと思います。おそらくあなたは提案がありますか? – bhall