在Angular2应用程序中使用element-resize-detector库 [英] Use element-resize-detector library in an Angular2 application

查看:115
本文介绍了在Angular2应用程序中使用element-resize-detector库的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试使用element-resize-detector库( https://github. com/wnr/element-resize-detector ).

I am trying to use the element-resize-detector library (https://github.com/wnr/element-resize-detector) in an Angular2 application.

根据我有限的JS模块知识,该库似乎是CommonJS格式的.经过几次尝试,我创建了以下定义文件(* .d.ts):

From my limited JS module knowledge, the library appears to be in CommonJS format. After several attempts, I have created the following definition file (*.d.ts):

declare module ResizeDetector {
  function ResizeDetector(options: any): ResizeDetector.Erd;

  interface Erd {
    listenTo(element: any, resizeCallback: any): void;
    uninstall(element: any): void;
  }
}
export = ResizeDetector;

然后我在TypeScript代码中使用以下import语句:

I then use the following import statement in my TypeScript code:

import * as ResizeDetector from 'element-resize-detector';

运行我的应用程序并使用console.log('ResizeDetector', ResizeDetector)时,将记录以下输出:

When running my app and using console.log('ResizeDetector', ResizeDetector), the following output is logged:

ResizeDetector function (options) {
    options = options || {};

    //idHandler is currently not an option to the listenTo function, so it should not be added to globalOptions.
    var idHandler;

    if (options.…

这向我显示该库已成功加载,并且返回了预期的功能.

This shows me that the library is successfully loaded and that it returns a function as expected.

我的问题是我现在如何开始在TypeScript中使用该库?当我尝试类似的事情时:

My question is how can I now start using the library in TypeScript? When I attempt something like:

private static resizeDetector = ResizeDetector({ strategy: 'scroll' });

我收到以下运输错误:

error TS2349: Cannot invoke an expression whose type lacks a call signature.

推荐答案

element-resize-detector.d.ts

declare function elementResizeDetectorMaker(options?: elementResizeDetectorMaker.ErdmOptions): elementResizeDetectorMaker.Erd;

declare namespace elementResizeDetectorMaker {
    interface ErdmOptions {
        strategy?: 'scroll' | 'object';
    }

    interface Erd {
        listenTo(element: HTMLElement, callback: (elem: HTMLElement) => void);
        removeListener(element: HTMLElement, callback: (elem: HTMLElement) => void);
        removeAllListeners(element: HTMLElement);
        uninstall(element: HTMLElement);
    }
}

export = elementResizeDetectorMaker;

消费者

let resizeDetector = elementResizeDetectorMaker({ strategy: 'scroll'});
resizeDetector.listenTo(document.getElementById('abc'), (elem: HTMLElement) => {
    console.log(elem.offsetWidth, elem.offsetHeight);
})

这篇关于在Angular2应用程序中使用element-resize-detector库的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆