2016-11-14 1 views
0

J'utilise actuellement Angular2/Typescript/PhoneGap sur un projet mobile, et j'essaie d'utiliser Angular2 pour atteindre la fonctionnalité Tirer vers Actualiser. Malheureusement, je ne peux pas utiliser Onsenui, Ionic ou jQuery pour la solution en raison des contraintes du projet.Angular2/Typescript Tirer pour rafraîchir

En tant que nouveau développeur angulaire (je suis un développeur junior en général), j'ai été incapable de trouver des exemples qui sont dans Angular2/Typescript (et n'utilisent pas les frameworks ci-dessus). La plupart des bibliothèques existantes semblent être angulaires1 et abandonnées. Voir here et here.

Ma question est la suivante: est-ce que quelqu'un connaît des exemples Angular2 que je peux apprendre ou des solutions alternatives pour y parvenir? Et sinon, ma meilleure option est-elle d'apprendre Angular1 assez bien pour convertir un de ces projets abandonnés en Angular2?

+0

Malheureusement, les questions tutoriel/framework sont hors sujet pour StackOverflow. –

+0

@DavidMakogon Je vous remercie de l'avoir signalé, et voir le lien pertinent [ici] (http://stackoverflow.com/help/on-topic). Malheureusement, je suppose que je ne connais pas l'endroit approprié pour poser ces questions génériques. Peut-être avez-vous une suggestion? – bhall

Répondre

1

Vous devriez certainement jeter un coup d'œil aux bases de l'angulaire 1. Puisque angular2 est encore jeune, dans l'avenir, vous devrez peut-être implémenter certaines fonctionnalités qui ne sont pas déjà disponibles. Pour l'instant, j'ai créé une implémentation naïve de la première bibliothèque que vous avez liée.

@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; 
    } 

} 

Et voici une utilisation de base

@Component({ 
    selector: 'app', 
    template: ` 
     <ptr-container (onPull)="onPull()" [refresh]="isInProgress"></ptr-container> 
    ` 
}) 
export class AppComponent { 

    isInProgress:boolean = false; 

    onPull() { 
     this.isInProgress = true; 
    } 

} 

Je ne l'ai pas testé la bibliothèque de base mais cela devrait fonctionner. Vous devrez peut-être annuler la méthode onScroll pour éviter le spam de l'émetteur d'événements.

J'espère que cela vous aidera.

+0

Merci beaucoup @Polochon pour votre réponse. J'ai pensé que je devrais me familiariser avec plus Angular1 pour ces types de scénarios. Cela me donne beaucoup à travailler/apprendre. – bhall

+0

Vous n'avez pas besoin de tout savoir sur angular1, juste les concepts de base. Le reste est du javascript pur, donc si vous êtes familier avec la langue, il n'y a aucune raison que cela vous prendra beaucoup de temps. – Polochon