动态模块导入不会在服务器的初始运行时编译

时间:2019-03-04 16:35:05

标签: angular typescript ecmascript-6 angular7

问题

最初运行服务器时,出现错误:ERROR in Cannot read property 'members' of null

我已经将其追溯到以下代码块:

const MODULES = [

    // This gets all of the page modules from the pages array of page objects
    // Then uses the spread operator to inject the resulting array of modules individually
    ...getPageModules(), <---- THIS IS THE PROBLEM LINE

    // Proceed as usual
    CommonModule,
    Sidebar,
    Windows,
    Taskbar
]

设置

因此,这是一个较大的窗口系统的一部分,该部分将组件动态加载到窗口中。由于页面需要引用模块以导入它们,然后窗口模块需要引用entryComponents的组件,因此建立了窗口服务以检索这些组件,以允许将它们动态注入到模块中。

这里是对getPageModules函数及其相关函数的引用:

getPageModules

// Returns all of the modules for all of the pages
export function getPageModules( _pages: any[] = pages ): any[] {

    // Get all of the module elements recursively from the pages array
    return getPageElements( pages, "module");
};

getPageElements

// Recursively retrieves all instances of a specific element in all page objects
export function getPageElements( _pages: any[] = pages, element ): any[] {

    // Recursively build an array of all elements.
    let elements = _pages.map( page => {

        // Return the page element, or the spread array of elements returned by a recursive call to this function
        return page[element] ? page[element] : [].concat.apply([], [...getPageElements(page.pages, element)]);
    })

    // Return the resulting elements
    return elements;
}

我尝试过的

我查看了这些函数的返回结果,没有任何问题。实际上,如果我注释掉问题行,然后保存并编译(程序已编译但由于未加载模块而无法运行),然后取消注释问题行并保存(该程序这次已编译并运行),则此方法有效因为模块已加载。

除此之外,我完全不知道为什么它在最初运行时不会编译。

我需要什么

我正在寻找一种动态加载这些模块并使应用程序在首次运行时正确编译的方法。

0 个答案:

没有答案