2016-03-20 110 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';