2017-07-14 32 views
0

我有一个项目,前端是通过@angular/cli: 1.1.3开发的。一切工作正常,直到我试图在prod模式下编译项目(ng build -prod)。在这里我用*ngFor指令与trackBy令牌的地方我有这样的ngFor trackBy'T'上不存在属性'p'BY

... SRC /应用/ app.component.ts.AppComponent.html(4,1​​1)的错误:属性 'P' 做在'AppComponent'类型上不存在。

如果我删除'trackBy'语句错误将会消失。 我在空白项目中重复了这个错误,将它附加在这里。

AppComponent类声明:

import {Component, OnInit} from '@angular/core'; 
import {Observable} from "rxjs/Rx"; 
@Component({ 
    selector: 'app-root', 
    template: ` 
    <ul> 
     <li *ngFor="let p of ppp | async;trackBy: p?.s"> 
     <h2>{{p.s}}</h2> 
     </li> 
    </ul>`, 
}) 
export class AppComponent implements OnInit { 
    ppp: Observable<any[]>; 
    constructor() { 
    } 
    ngOnInit() { 
    this.ppp = Observable.create((observer) => { 
     observer.next([{s: "0"}]); 
     setTimeout(function() { 
     observer.next([{s: "1"}, {s: "2"}, {s: "3"}]); 
     }, 2000); 
    }); 
    }  
} 

的AppModule类声明:

import {BrowserModule} from '@angular/platform-browser'; 
import {NgModule} from '@angular/core'; 

import {AppComponent} from './app.component'; 

@NgModule({ 
    declarations: [ 
    AppComponent 
    ], 
    imports: [ 
    BrowserModule 
    ], 
    providers: [], 
    bootstrap: [AppComponent] 
}) 
export class AppModule { 
} 

是否有成功调用ng build -prod并保持trackBy报表的方法;

回答

3

trackBy必须是组件上的函数值属性。阅读the documentation,这很清楚。

向组件添加一个方法,返回值NgFor应跟踪。

<li *ngFor="let p of ppp | async; trackBy: trackByS"> 
    <h2>{{p.s}}</h2> 
</li> 

public trackByS(p) { return p.s; } 

你的代码实际上并没有做什么你认为它的trackBy一部分,即使与AOT不进行编译。 trackBy: p?.s试图访问该组件上的属性p,该属性不存在,因此被忽略。只是AoT编译模板逻辑,暴露了错误。

相关问题