2016-05-02 104 views
3

我想在我的angular2应用中使用第三方UI元素/组件,例如, spin.js。要使用该库,我将不得不直接访问DOM这是不是真的应该在angular2做的方式(以下几个原因例如像服务器端渲染):在angular2中包装第三方组件

var target = document.getElementById('foo') 
var spinner = new Spinner(opts).spin(target); 

是否有关于如何任何意见在angular2中处理这些第三方库?还是直接的DOM操作是现在唯一的方法?

+0

你可以分享你plunker演示,因为即使我想建立一个指令......所以我可以使用你的代码作为参考,并继续...请先生 –

回答

3

我将它包装成一个自定义的指令:

@Directive({ 
    selector: '[spinner]' 
}) 
export class SpinnerDirective { 
    constructor(private elementRef:ElementRef.nativeElement) { 
    } 

    ngAfterViewInit() { 
    var spinner = new Spinner(opts).spin(this.elementRef); 
    } 
} 

,并使用这种方式:

@Component({ 
    (...) 
    template: ` 
    <span spinner>...</span> 
    `, 
    directives: [ SpinnerDirective ] 
}) 
export class SomeComponent { 
    (...) 
} 
+1

谢谢,它的工作,除了我必须在旋转方法内使用elementRef.nativeElement – Finkes

+2

我的组件装饰没有指令参数(使用TypeScript )。这是TypeScript的限制还是有不同的官方方式向组件添加指令? – masonk