gpt4 book ai didi

Angular 2 提前编译器 : must I make all class properties public?

转载 作者:太空狗 更新时间:2023-10-29 16:54:18 31 4
gpt4 key购买 nike

Angular 2 rc 6typescript 2node 4.5.0npm 2.15.9 Windows 7

我正在尝试从即时编译转移到提前编译,我依赖这些资源:

我知道我需要运行编译器 ngc 来生成 ngfactory.ts 文件,并且我需要更改 main.ts使用 platformBrowser 而不是 platformBrowserDynamic 进行引导。不过,我遇到了障碍,不知道如何继续。

1. 我已经确认应用程序使用即时编译运行时没有错误。我的 main.ts 是:

enableProdMode();
platformBrowserDynamic().bootstrapModule(AppModule);

2. 我从生产文件夹中清除了所有应用程序文件,但保留了第 3 方库(例如:Angular 2、Angular 2 Material)

3. 我运行 "node_modules/.bin/ngc"-p ./ 这运行时控制台没有输出。我看到每个 .ts 组件和模块都有一个 .ngfactory.ts 文件。我还为每个包含组件样式的 .css 看到了一个 .css.shim.ts 文件。此外,.js.js.map 文件已经转译并放置在生产目录下

4. 如果此时尝试运行该应用程序,我会看到所有 .html 文件的 404 not found 错误持有组件模板

5. 我手动将所有模板文件 (.html) 移动到生产目录并运行应用程序。它运行良好,但它仍然使用即时编译(255 个请求,包括 compiler.umd.js)

6. 我将我的 main.ts 更改为:

enableProdMode();
platformBrowser().bootstrapModuleFactory(AppModuleNgFactory);

就其本身而言,这没有什么区别,因为新代码尚未编译。但是,我不知道从这里可以做什么。

我应该再次运行 ngc 吗?如果是这样,我会收到很多此类错误:

Error at C:/path/to/notify.component.ngfactory.ts:113:41: Property 'visible' is private and only accessible within class 'NotifyComponent'
... (many more like that with lots of properties from lots of components)
Compilation failed

使用 AoT 编译是否意味着我必须公开我所有的类属性?我错过了一步吗?

最佳答案

对于给定的组件,其模板访问的所有成员(方法、属性)必须在提前编译场景中是公开的。这是因为模板被转换为 TS 类。生成的类和组件现在是 2 个独立的类,您不能跨类访问私有(private)成员。

简而言之:如果您想使用提前编译,则无法访问模板中的私有(private)成员。

关于Angular 2 提前编译器 : must I make all class properties public?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39378643/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com