【问题标题】:Error when execute the command ng build --prod (Angular)执行命令 ng build --prod (Angular) 时出错
【发布时间】:2018-07-16 19:45:47
【问题描述】:

当我在 Angular 中执行命令 ng build --prod 时出现错误。我已经完成了我的小项目,我需要生成文件以上传到我的托管服务提供商。

错误 - 角度 CLI

C:\Users\Johan Corrales\Documents\GitHub\inventory>ng build --prod

Date: 2018-07-16T19:15:30.635Z
Hash: 7c51a01b7d98bff3951d
Time: 16720ms
chunk {scripts} scripts.e0a8f821933ac7e59b03.js (scripts) 154 kB  [rendered]
chunk {0} runtime.a66f828dca56eeb90e02.js (runtime) 1.05 kB [entry] [rendered]
chunk {1} styles.fa70ecd2f42fd8700239.css (styles) 141 kB [initial] [rendered]
chunk {2} polyfills.207dcc605630215505f5.js (polyfills) 130 bytes [initial] [rendered]
chunk {3} main.f58b96bf9bf614ca37d4.js (main) 128 bytes [initial] [rendered]

ERROR in src\app\detalle-bodega\detalle-bodega.component.html(35,112): : Property 'nombre_bodega' does not exist on type 'any[]'.
src\app\detalle-bodega\detalle-bodega.component.html(39,110): : Property 'fecha_bodega' does not exist on type 'any[]'.
src\app\detalle-bodega\detalle-bodega.component.html(43,112): : Property 'ciudad_bodega' does not exist on type 'any[]'.
src\app\detalle-bodega\detalle-bodega.component.html(51,115): : Property 'direccion_bodega' does not exist on type 'any[]'.
src\app\detalle-bodega\detalle-bodega.component.html(55,112): : Property 'numero_bodega' does not exist on type 'any[]'.
src\app\detalle-bodega\detalle-bodega.component.html(59,112): : Property 'codigo_bodega' does not exist on type 'any[]'.

许多变量或属性是西班牙语。

查看/HTML

<div class="col-md-6">
    <div class="form-group text-left">
       <label class="">Bodega</label>
       <input type="text" class="form-control border-primary" placeholder="Nombre de la bodega" [value]="listadoBodegas.nombre_bodega">
    </div>
    <div class="form-group text-left">
       <label class="">Fecha de Registro</label>
       <input type="text" class="form-control border-primary" placeholder="Fecha de registro" [value]="listadoBodegas.fecha_bodega" disabled>
    </div>
    <div class="form-group text-left">
        <label class="">Ciudad</label>
        <input type="text" class="form-control border-primary" placeholder="Ciudad de la bodega" [value]="listadoBodegas.ciudad_bodega">
    </div>
 </div>
 <div class="col-md-6">
    <div class="form-group text-left">
       <label class="">Dirección</label>
       <input type="text" class="form-control border-primary" placeholder="Dirección de la bodega" [value]="listadoBodegas.direccion_bodega">
    </div>
    <div class="form-group text-left">
       <label class="">Número</label>
       <input type="text" class="form-control border-primary" placeholder="Número de la bodega" [value]="listadoBodegas.numero_bodega">
    </div>
    <div class="form-group text-left">
        <label class="">Código</label>
        <input type="text" class="form-control border-primary" placeholder="Código de la bodega" [value]="listadoBodegas.codigo_bodega">
    </div>
</div>

TYPESCRIPT / COMPONENT.TS

import { Component, OnInit } from '@angular/core';
import { ActivatedRoute } from '@angular/router';
//Importacion de servicios
import { BodegaService } from './../services/bodega.service';

@Component({
  selector: 'app-detalle-bodega',
  templateUrl: './detalle-bodega.component.html',
  styleUrls: ['./detalle-bodega.component.css']
})
export class DetalleBodegaComponent implements OnInit {

  //Declaracion del array para el listado de las bodegas
  listadoBodegas:any[] = [];
  //Declaracion de modelos
  nombre_bodega:any;
  fecha_bodega:any;
  ciudad_bodega:any;
  direccion_bodega:any;
  numero_bodega:any;
  codigo_bodega:any;

  constructor(
    private ruta:ActivatedRoute,
    private _service:BodegaService
  ){
    this.ruta.params.subscribe(params=>{
      //console.log("params: " , params['id']);
      this.listadoBodegas = this._service.obtenerIndexBodega(params['id']);
      //console.log("listado: ", this.listadoBodegas)
    });
  }

  ngOnInit() {
  }

}

TYPESCRIPT / SERVICE.TS

import { Injectable } from '@angular/core';

@Injectable({
  providedIn: 'root'
})
export class BodegaService {

  //Declaracion de modelos
  nombre_bodega:any;
  fecha_bodega:any;
  ciudad_bodega:any;
  direccion_bodega:any;
  numero_bodega:any;
  codigo_bodega:any;

  //Declaracion de array
  listadoBodegas:any[] = [
    {
      nombre_bodega:'Mac Pollo',
      numero_bodega:'200',
      ciudad_bodega:'Pereira, Risaralda',
      direccion_bodega: 'Via el pollo',
      codigo_bodega:'1000',
      fecha_bodega:'03/05/2018'
    },
    {
      nombre_bodega:'Corosito',
      numero_bodega:'201',
      ciudad_bodega:'Pereira, Risaralda',
      direccion_bodega: 'Via el pollo',
      codigo_bodega:'1001',
      fecha_bodega:'03/05/2018'
    },
    {
      nombre_bodega:'INCAUCA',
      numero_bodega:'202',
      ciudad_bodega:'Cali, Valle del Cauca',
      direccion_bodega: 'Centro logístico',
      codigo_bodega:'1002',
      fecha_bodega:'03/05/2018'
    },
    {
      nombre_bodega:'El Bombillo',
      numero_bodega:'203',
      ciudad_bodega:'La Virginia, Risaralda',
      direccion_bodega: 'Zona Franca',
      codigo_bodega:'1003',
      fecha_bodega:'03/05/2018'
    },
    {
      nombre_bodega:'El Arriero',
      numero_bodega:'204',
      ciudad_bodega:'Pereira, Risaralda',
      direccion_bodega: 'Cerritos',
      codigo_bodega:'1004',
      fecha_bodega:'03/05/2018'
    }
  ]

  constructor() { }

  consultarBodega()
  {
    return this.listadoBodegas;
  }

  obtenerIndexBodega(id)
  {
    return this.listadoBodegas[id];
  }
}

我不得不说,当在 Angular cli 中使用命令 ng serve 运行时,一切都以正确的方式运行。那么,我做错了什么?角度 cli 显示该错误。谢谢!

【问题讨论】:

    标签: angular typescript angular-cli angular6 production


    【解决方案1】:

    ng build --prod 正在制作比 ng build 或 ng serve 更小的包大小。因此,所有类型定义都经过严格检查。

    您只需要消除所有错误,构建就会通过。

    我们可以从输出的错误中看到。你有问题

    listadoBodegas: any[] = [];
    

    随便吧:

    listadoBodegas: any = [];
    

    listadoBodegas: Array<any> = [];
    

    我们可以看到你有一个对象数组,所以你需要像这样遍历数组:

    <div *ngFor="let item of listadoBodegas">
    
        <div class="col-md-6">
            <div class="form-group text-left">
                <label class="">Bodega</label>
                <input type="text" class="form-control border-primary" placeholder="Nombre de la bodega" [value]="item.nombre_bodega">
            </div>
            <div class="form-group text-left">
                <label class="">Fecha de Registro</label>
                <input type="text" class="form-control border-primary" placeholder="Fecha de registro" [value]="item.fecha_bodega" disabled>
            </div>
            <div class="form-group text-left">
                <label class="">Ciudad</label>
                <input type="text" class="form-control border-primary" placeholder="Ciudad de la bodega" [value]="item.ciudad_bodega">
            </div>
        </div>
        <div class="col-md-6">
            <div class="form-group text-left">
                <label class="">Dirección</label>
                <input type="text" class="form-control border-primary" placeholder="Dirección de la bodega" [value]="item.direccion_bodega">
            </div>
            <div class="form-group text-left">
                <label class="">Número</label>
                <input type="text" class="form-control border-primary" placeholder="Número de la bodega" [value]="item.numero_bodega">
            </div>
            <div class="form-group text-left">
                <label class="">Código</label>
                <input type="text" class="form-control border-primary" placeholder="Código de la bodega" [value]="item.codigo_bodega">
            </div>
        </div>
    
    </div>
    

    或者可能只是输出数组的第一个索引:

    <div class="col-md-6">
        <div class="form-group text-left">
            <label class="">Bodega</label>
            <input type="text" class="form-control border-primary" placeholder="Nombre de la bodega" [value]="listadoBodegas[0].nombre_bodega">
        </div>
        <div class="form-group text-left">
            <label class="">Fecha de Registro</label>
            <input type="text" class="form-control border-primary" placeholder="Fecha de registro" [value]="istadoBodegas[0].fecha_bodega" disabled>
        </div>
        <div class="form-group text-left">
            <label class="">Ciudad</label>
            <input type="text" class="form-control border-primary" placeholder="Ciudad de la bodega" [value]="istadoBodegas[0].ciudad_bodega">
        </div>
    </div>
    <div class="col-md-6">
        <div class="form-group text-left">
            <label class="">Dirección</label>
            <input type="text" class="form-control border-primary" placeholder="Dirección de la bodega" [value]="istadoBodegas[0].direccion_bodega">
        </div>
        <div class="form-group text-left">
            <label class="">Número</label>
            <input type="text" class="form-control border-primary" placeholder="Número de la bodega" [value]="istadoBodegas[0].numero_bodega">
        </div>
        <div class="form-group text-left">
            <label class="">Código</label>
            <input type="text" class="form-control border-primary" placeholder="Código de la bodega" [value]="istadoBodegas[0].codigo_bodega">
        </div>
    </div>
    

    【讨论】:

    • 明白了,但是,我忘了说我的这段代码是一个“主 - 细节”页面,所以我有一个酒窖(仓库)列表,还有一个你可以观看的选项该仓库的所有详细信息,因此我需要在输入中显示每个人的详细信息类型为文本。为此,我不使用循环(ngFor)。
    【解决方案2】:

    这段代码:

      obtenerIndexBodega(id)
      {
        return this.listadoBodegas[id];
      }
    

    从数组中返回一个元素(对象),而不是数组。

    所以这个:

    listadoBodegas:any[] = [];
    

    需要这样:

    listadoBodegas = {};
    

    另外,我建议为您的 listadoBodegas 定义一个接口,这样您就不需要使用“任何”数据类型。

    【讨论】:

    • 嗨@DeborahK 我忘了说这种类型的页面还有另一个页面作为“主 - 详细信息”。为此,我正在使用那部分代码。所以,仓库列表作为第一页,如果我点击“详细信息”按钮,我会进入一个新界面,显示所选仓库的每个详细信息。
    • 那么您的“主”页面缺少 *ngFor 来循环显示列表中的项目。我在这里有一个主/详细页面的完整示例:github.com/DeborahK/Angular-GettingStarted/tree/master/… 查看产品文件夹中的产品列表和产品详细信息页面。希望这些会有所帮助。
    【解决方案3】:

    所以,你有 listadoBodegas,任何东西的数组。

    listadoBodegas : any[] 
    

    然后你写:

    listadoBodegas.nombre_bodega
    

    这是不可能的。您有一个 List [] OR 和对象,其属性为 nombre_bodega 但不是两者兼有。

    所以也许,您没有数组并从您的类型中删除 []。或者如果是数组,则需要获取里面的不同元素。

    【讨论】:

    • 那么,在类型页面“主 - 详细信息”中显示数据的正确方法是什么,因为页面酒窖有酒窖列表,您触摸按钮详细信息,下一个组件是详细信息那个酒窖(仓库)
    • @DeborahK 和其他成员也给出了很好的答案。你可以检查他们
    【解决方案4】:

    当您为您的应用程序提供服务时,可能不会显示一些不会破坏应用程序的错误。 您将输入的值绑定到一个空数组。 你可以这样做来避免这个问题

    <input type="text" [value]="listadoBodegas.nombre_bodega?">

    在绑定中的值后添加? 将检查该值是否存在。

    【讨论】:

    • 首先是listadoBodegas?.nombre_bodega,其次,这不是这里的问题。这将导致运行时错误,并且 OP 正在询问编译时错误。
    • 这里的错误是listaBodegas是一个空数组,所以访问listaBodegas.nombre_bodega会报错,因为listadoBodegas中不存在nombre_bodega。
    • 不,错误是编译时错误。编译器不知道数组是空的。真正的问题是因为数组没有nombre_bodega 属性。此外,正如@DeborahK 所指出的,obtenerIndexBodega 甚至不返回一个数组,所以不应该这样输入
    • 为什么它与 Ng serve 一起运行?
    • 因为ng build --prod(不像ng serve)执行AOT编译,所以它也会尝试发现模板中的任何错误
    猜你喜欢
    • 1970-01-01
    • 2021-08-07
    • 1970-01-01
    • 2020-04-17
    • 2020-12-03
    • 2022-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多