Angular 2 Ahead-of-Time编译器:我必须公开所有类属性吗?

Bee*_*ice 20 deployment npm typescript angular2-aot angular

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

我正试图从即时编译转变为提前编译,我依赖这些资源:

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

1.我已确认使用即时编译可以正常运行App.我main.ts是:

enableProdMode();
platformBrowserDynamic().bootstrapModule(AppModule);
Run Code Online (Sandbox Code Playgroud)

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

3.我运行"node_modules/.bin/ngc" -p ./它运行时没有输出到控制台.我看到了.ngfactory.ts每个.ts组件和模块的文件.我还看到了.css.shim.ts每个.css持有组件样式的文件.此外,.js.js.map文件已被transpiled,并放置在生产目录

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

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

6.我改变main.ts为:

enableProdMode();
platformBrowser().bootstrapModuleFactory(AppModuleNgFactory);
Run Code Online (Sandbox Code Playgroud)

就其自身而言,由于新代码尚未编译,因此没有任何区别.但是,我不知道该怎么做.

我应该再跑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
Run Code Online (Sandbox Code Playgroud)

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

pko*_*rce 37

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

简而言之:如果要使用提前编译,则无法访问模板中的私有成员.

  • 这也是我的想法.希望离子文档更清楚,因为"将私有变量转换为公共"听起来有点可怕 (4认同)