从父类自动导入对象

时间:2018-02-20 18:38:25

标签: typescript

现在我正在导出一个“单身”WebGL2RenderingContext,如下所示:

export default GLHelper.GetGLContext(UIHelper.Canvas);

之后我在整个应用程序中使用它,如:

import gl from '.';

gl.DrawElements(/*...*/);

我的项目结构的根目录在app.ts类中。在这个类中,我有其他类的实例,基本上每个类都使用上面的导出。

我的问题是,一旦我决定使用几个canvas元素,我将拥有多个WebGL2RenderingContext个对象,因此我的单例导出将始终在同一个画布上运行。

我能想到的唯一解决方案是获取所有上下文对象并将其作为参数传递给整个代码。我想的是:

const ctx1 = GLHelper.GetGLContext("id1");
const ctx2 = GLHelper.GetGLContext("id2");

const app1 = new App(ctx1);
const app2 = new App(ctx2);

App课程中,我必须进一步传递对象,如:

class App {

    private _ctx: WebGL2RenderingContext;

    constructor (ctx: WebGL2RenderingContext) {
        this._ctx = ctx;
        // Pass down the context
        const renderingObj = new Mesh(ctx);
    }
}

我想要实现的是App类中的单个导出,只需导入它就会自动在其他类中使用。这样我希望renderingObj自动使用在创建它的App实例中导出的上下文。如果我不必传递上下文,那么这真的很酷作为参数。

有没有办法实现这个目标,或者可能以另一种方式解决问题?

1 个答案:

答案 0 :(得分:2)

嗯不确定,但我认为您可以创建全局变量,然后在您需要的任何地方使用它。

创建全局变量的示例。

// First declare the window global outside the class

declare let window: any;

// Inside the required class method

let globVarName = window.globVarName;

编辑:

  

我想要实现的是App类中的单个导出   只需导入即可自动在其他类中使用   它

一种选择是在App类中使用全局变量来声明它并在任何地方使用它,而不是在每种情况下单独传递上下文作为参数。