Angular:注入不会在生成版本中构建

时间:2018-03-18 14:16:58

标签: angular build code-injection

我正在使用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'中访问。

但为什么呢?注射有问题吗?

1 个答案:

答案 0 :(得分:1)

为未来的读者添加答案。

如果您在模板文件中使用变量navigationService,那么如果您使用aot进行构建,则会出错。

建议但不一定要使用aot进行生产。但是,当您这样做时,请确保仅在同一.ts文件中访问您的私有变量。甚至不是来自.html或模板文件。

同时检查this以了解允许的内容以及aot中不允许的内容。