为什么角度分量字段应该是公开的

时间:2018-01-22 17:30:30

标签: angular

此角度组件在开发模式下正常工作:

这是html文件:

apt-get -f install

这是打字稿文件的顶部:

     <form>
            <select id="id_liste_selectionnee" [(ngModel)]="champ_id_liste_selectionnee" name="zzz">
                <option></option>
                <option *ngFor="let item of donnees" value="{{ item.id_liste }}">{{ item.nom_liste }}</option>
            </select>
        </div>
    </form>

但是当我尝试发布时看看这个错误:

$ ng build --extract-css&#34; - prod&#34;

import { Component } from '@angular/core';
import {Service1} from "../services/service1.service";
import {Liste} from "../models/Liste";

@Component({
  selector: 'tagcomposant1',
  templateUrl: './composant1.component.html'
})
export class Composant1Component {
    private donnees:Liste[];
    private champ_id_liste_selectionnee:number|null;
  ....

如果我把这个字段改为公开:一切正常。我的问题是:为什么我在开发模式下没有错误。该应用程序在我的开发计算机上运行时运行良好。

由于

2 个答案:

答案 0 :(得分:2)

在开发模式下,使用Angular的JIT编译器:一旦浏览器下载了应用程序,它就会将html模板转换为JavaScript代码。在JavaScript中,一切都是公开的,所以你没有问题。

在prod模式下,使用AOT编译器。构建应用程序时,模板将转换为TypeScript文件,然后将这些文件与您编写的组件代码一起编译为JavaScript。

因此,Angular会为您的模板生成一个TypeScript类,当然这需要访问组件中的字段。由于它们是私有的,因此TypeScript编译器会抱怨。

即使在开发过程中,AOT也会成为默认设置。当这种情况发生时,你会很快发现这些错误,并且会发展。

答案 1 :(得分:0)

这是因为在开发过程中,未启用Compilation Ahead Of Time(AOT)而不是生产版本。

启用AOT服务应该抛出错误:

ng serve --aot

将来AOT将在开发模式下默认启用。

如果您使用Visual Studio Code,则可以安装Angular Language Service扩展名,其功能之一是检查AOT错误。