2016-03-20 140 views

回答

2

你的例子真的很舊,它使用的東西,如toRx()已被棄用和很久以前刪除。該示例還使用EventEmitter並正在訂閱它們,我們should't do that,它也使用nativeElement和我們shouldn't do that either將值設置爲DOM。

所以我修改的例子有點

  • 我刪除EventEmitter和主題
  • 刪除toRx(),沒有必要再
  • 用來渲染器設置cursor和元素position取而代之。

這是現在的代碼看起來像一小段代碼,它沒有什麼不同。

constructor(public element: ElementRef, public renderer: Renderer) { 
    this.renderer.setElementStyle(element.nativeElement, 'position', 'relative'); 
    this.renderer.setElementStyle(element.nativeElement, 'cursor', 'pointer'); 

    this.mousedrag = this.mousedown.map(event => { 
     event.preventDefault(); 
     return { 
      left: event.clientX - this.element.nativeElement.getBoundingClientRect().left, 
      top: event.clientY - this.element.nativeElement.getBoundingClientRect().top 
     }; 
     }) 
     .flatMap(imageOffset => this.mousemove.map(pos => ({ 
     top: pos.clientY - imageOffset.top, 
     left: pos.clientX - imageOffset.left 
     })) 
     .takeUntil(this.mouseup)); 

    } 

這裏是full example的工作。

+0

非常感謝。現在我明白了:-) – alpavlove

+0

不客氣! –

+1

我喜歡「不應該那樣做」的鏈接:) –

0

從您的回購看起來好像您使用的是舊版本的Angular2 packages
但你可以試試這個,或者埃裏克馬丁內斯已經給你精彩的工作演示。

import'rxjs/Rx';