Ho anche iniziato con lo stesso esempio per i miei dispositivi mobili e l'ho fatto funzionare. L'esempio è tratto da una versione precedente di angular2, quindi sono necessarie alcune modifiche. Controlla this answer. Ha alcuni di quei cambiamenti in esso. Buona fortuna!
mia versione scopo un po 'più generale va in questo modo:
import {Directive, EventEmitter, HostListener, Output} from 'angular2/core';
import {Observable} from 'rxjs/Observable';
@Directive({
selector: '[draggable]'
})
export class DraggableDirective {
@Output() mousedrag: Observable<{x: number, y: number}>;
@Output() dragend = new EventEmitter<void>();
mousedown = new EventEmitter<MouseEvent>();
mousemove = new EventEmitter<MouseEvent>();
dragActive = false;
@HostListener('document:mouseup', ['$event'])
onMouseup(event) {
if(this.dragActive) {
this.dragend.emit(null);
this.dragActive = false;
}
}
@HostListener('mousedown', ['$event'])
onMousedown(event: MouseEvent) {
this.mousedown.emit(event);
}
@HostListener('document:mousemove', ['$event'])
onMousemove(event: MouseEvent) {
if(this.dragActive) {
this.mousemove.emit(event);
return false;
}
}
constructor() {
this.mousedrag = this.mousedown.map((event) => {
this.dragActive = true;
return { x: event.clientX, y: event.clientY };
}).flatMap(mouseDownPos => this.mousemove.map(pos => {
return { x: pos.clientX - mouseDownPos.x, y: pos.clientY - mouseDownPos.y };
}).takeUntil(this.dragend));
}
}
Prendere che con un pizzico di sale, come attualmente sto inseguendo una perdita di memoria che sembra essere correlato a questa direttiva. Aggiornerò se trovo un problema.
Mi sono reso conto di aver dimenticato di aggiungere la direttiva all'elenco delle direttive dei componenti. Sebbene, ora sembra che il metodo .toRx su EventEmitter non sia più disponibile. Come dovrebbe essere cambiato? – theva
A partire dalla Beta 1, [non è più necessario chiamare .toRx() sull'emettitore] (http://stackoverflow.com/questions/33530726/angular-2-eventemitter-broadcasting-next-from-a-service- funzione/33534404 # 33534404). –
è abbastanza buono descritto qui http://stackoverflow.com/a/38710223/2173016 –