从Angular2

时间:2017-01-30 01:52:39

标签: angular

我们有一个现有的插件,我们称之为

var result = $('.myElement').OurPluginName({});

我试图用Angular2指令替换它。

我的 test.ts

/// <reference path="test.d.ts" />
import { Directive, ElementRef, NgZone } from '@angular/core';

@Directive({
    selector: 'test'
})

export class Test {
    public ngAfterViewInit(): void {
        this.zone.runOutsideAngular(() => {
            this.OurPluginName({});
        });
    }
}

我的 test.d.ts

declare function OurPluginName(options: Object): void;

尽管创建了一个声明,它仍然给我一个错误:

  

属性&#39; OurPluginName&#39;类型&#39;测试&#39;

上不存在


解决方案:(感谢Volodymyr Bilyachat)

test.ts

/// <reference path="test.d.ts" />
import { Directive, ElementRef, NgZone } from '@angular/core';

@Directive({
    selector: 'test'
})

export class Test {
    public constructor(private elRef: ElementRef) {
    } 

    public ngAfterViewInit(): void {
        this.zone.runOutsideAngular(() => {
            $(this.elRef.nativeElement).OurPluginName({});
        });
    }
}

test.d.ts

declare var $: any;

1 个答案:

答案 0 :(得分:1)

您正在调用未定义的this.OurPluginName({})

export class Test {
    public ngAfterViewInit(): void {
        this.zone.runOutsideAngular(() => {
            this.OurPluginName({}); <-- here you call for this
        });
    }
}

你应该有这样的东西:

为$添加类型定义,因为你的插件是jquery one

declare var $: any;

在类方法中定义调用

export class Test {
  constructor() {

  }

  CallOurPluginName(options) {
    $('.myElement').OurPluginName({})
  }

  public ngAfterViewInit(): void {
    this.zone.runOutsideAngular(() => {
      this.CallOurPluginName({});
    });
  }
}

PS。它不是最好的方法,但应该有效。