我正在使用Angular 5.1.1。我有一个带有导航服务的应用程序,我将其注入到我的组件中。
服务
@Injectable()
export class NavigationService {
...
}
组件:
import { Component } from '@angular/core';
import { NavigationService } from './services/navigation.service';
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.less'],
providers: [NavigationService]
})
export class AppComponent {
title = 'App Title';
constructor(private navigationService: NavigationService) { }
}
<div *ngIf="navigationService.navigationModel != null">
<app-navigation-head></app-navigation-head>
<div class="flex-container">
<div class="nav-container">
<app-navigation-side></app-navigation-side>
</div>
<div class="page-container">
<app-data-page></app-data-page>
</div>
</div>
</div>
当我使用ng服务运行应用程序时,一切都很好。当我用ng build构建它时。注射工作和应用程序工作正常。 但是当我想用ng build --prod构建它时,我得到了错误:
src / app / app.component.html(1,6)中的错误::属性'navigationService'是私有的,只能在类'AppComponent'中访问。
但为什么呢?注射有问题吗?
答案 0 :(得分:1)
为未来的读者添加答案。
如果您在模板文件中使用变量navigationService
,那么如果您使用aot
进行构建,则会出错。
建议但不一定要使用aot
进行生产。但是,当您这样做时,请确保仅在同一.ts
文件中访问您的私有变量。甚至不是来自.html
或模板文件。
同时检查this以了解允许的内容以及aot中不允许的内容。