Angular2 webpack 构建 UserError
Angular2 webpack building UserError
我用 webpack seed 创建了一个应用程序,但现在我想在 aot 中编译产品,我得到了 UserError.Error 并且不知道如何修复它
这发生在 webpack 构建期间 angular 编译之后。
这是错误:
正在使用 angular 编译器开始编译。
Angular 编译完成,开始 webpack 打包。
错误:D:/Projets/sites/brick_reader_front/compiled/src/app/set/set.component.ngfactory.ts:2848:52 处的错误:提供的参数与调用目标的任何签名都不匹配。
在 UserError.Error(本地)
在新的 UserError (D:\Projets\sites\brick_reader_front\node_modules\tools\@angular\tsc-wrapped\src\tsc.ts:33:25)
检查时 (D:\Projets\sites\brick_reader_front\node_modules\tools\@angular\tsc-wrapped\src\tsc.ts:69:11)
在 Tsc.typeCheck (D:\Projets\sites\brick_reader_front\node_modules\tools\@angular\tsc-wrapped\src\tsc.ts:152:5)
在 D:\Projets\sites\brick_reader_front\node_modules\tools\@angular\tsc-wrapped\src\main.ts:68:11
在 process._tickCallback (internal/process/next_tick.js:103:7)
如果需要任何帮助我修复它,请告诉我
谢谢!
编辑:
这是html:
<div class="app-content">
<h2 fxFlex fxLayoutAlign="center">{{'SET_DETAIL' | translate}}</h2>
<div class="btn" fxFlex fxLayoutAlign="center">
<button class="btn-back" md-raised-button (click)="goBack()">{{'BACK' | translate}}</button>
</div>
<div fxLayout.gt-md="row" fxLayoutWrap="wrap" fxLayoutAlign="space-around" fxLayout.xs="column">
<md-card class="setDetail" *ngIf="setDetail" fxLayout="row" fxLayout="column" fxLayoutWrap="wrap" fxLayoutAlign="space-around " fxFlex="30">
<md-card-header>
<img md-card-avatar src="{{setDetail.image}}" alt="" />
<md-card-title-group>
<md-card-title>
{{setDetail.name}}
</md-card-title>
<md-card-subtitle>
{{setDetail.idSet}}
</md-card-subtitle>
</md-card-title-group>
</md-card-header>
<md-card-content style="text-align: center;">
<div fxFlex="50" class="ml">
<md-icon class="left">bookmark_border</md-icon>
<p class="left">
{{setDetail.theme}}
</p>
</div>
<div fxFlex="50" class="mr">
<md-icon class="right">date_range</md-icon>
<p class="right" style="margin-right: 2px;">
{{setDetail.year}}
</p>
</div>
<hr />
<md-icon class="left">view_quilt</md-icon>
<p class="left">
{{setDetail.number}} {{'PARTS' | translate}}
</p>
<span *ngIf="auth.authenticated()">
<p class="right" *ngIf="update && model && model.status > 0">
{{model.status}} missing parts
</p>
<p class="right" *ngIf="update && model && model.status == 0">
Set full
</p>
<p class="right" *ngIf="!update">
Don't own
</p>
</span>
</md-card-content>
<md-card-actions class="btn" align="center">
<button class="btn-actions" md-raised-button color="primary" *ngIf="isView" (click)="getSetParts(); isView = false">{{'SEE_PARTS' | translate}}</button>
</md-card-actions>
<md-card>
<md-card-title *ngIf="update" fxFlex fxLayoutAlign="center">
{{'UPDATE_SET' | translate}}
</md-card-title>
<md-card-title *ngIf="!update" fxFlex fxLayoutAlign="center">
{{'ADD_SET' | translate}}
</md-card-title>
<md-card-content>
<div *ngIf="!sended && submitted" fxFlex fxLayoutAlign="center">
<md-progress-spinner mode="indeterminate"></md-progress-spinner>
</div>
<div *ngIf="sended" fxFlex fxLayoutAlign="center">
<h3>{{'SET_SAVED' | translate}}</h3>
</div>
<div *ngIf="!sended && !submitted">
<form fxFlex fxLayoutWrap="wrap" align="left" fxLayout="column">
<md-checkbox [(ngModel)]="model.instruction" name="instruction">
{{'INSTRUCTION' | translate}}
</md-checkbox>
<md-checkbox [(ngModel)]="model.box" name="box">
{{'BOX' | translate}}
</md-checkbox>
<md-checkbox [(ngModel)]="model.forPart" name="forPart">
{{'FOR_PARTS' | translate}}
</md-checkbox>
<md-input-container class="example-full-width">
<textarea mdInput style="width:100%;" id="comment" placeholder="{{'COMMENT' | translate}}" [(ngModel)]="model.note" name="comment"></textarea>
</md-input-container>
</form>
</div>
<md-card-actions *ngIf="!sended" align="center">
<button *ngIf="!update" class="btn-actions" md-raised-button color="accent" (click)="onSubmit()">{{'SUBMIT' | translate}}</button>
<button *ngIf="update" class="btn-actions" md-raised-button color="accent" (click)="onSubmit()">{{'UPDATE' | translate}}</button>
<button class="btn-actions" md-raised-button color="accent" *ngIf="update" (click)="deleted(setDetail)">{{'DELETE' | translate}}</button>
</md-card-actions>
</md-card-content>
</md-card>
</md-card>
<md-card fxLayoutAlign="space-around center" fxFlex="30">
<div fxFlex="100">
<img *ngIf="setDetail" md-card-image src="{{setDetail.image}}" alt="" />
</div>
</md-card>
<md-card *ngIf="setDetail && setDetail.setInstructions && setDetail.setInstructions.length > 0" fxFlex.gt-md="30" fxFlex>
<md-card-content style="text-align: center;">
<md-card-title style="text-align: center;">
{{ isInstructions }}
</md-card-title>
<div fxLayout="row" fxLayoutAlign="space-around" *ngIf="setDetail && setDetail.setInstructions" class="set_instruction">
<div fxFlex="20" *ngFor="let instruction of setDetail.setInstructions; let id=index">
<a>
<img src="{{instruction.frontPageInfo}}" alt="" fxFlex (click)="imgClicked($event.target, id)" [class.highlight]="isSelected(id)" />
<!--</span>--><br>
</a>
</div>
</div>
<md-divider></md-divider>
<div fxLayout="column" *ngIf="imgSelected >= 0 && setDetail && setDetail.setInstructions && setDetail.setInstructions.length > 0">
<div fxLayout="row" fxFlex="100">
<div fxFlex="100">
<img class="frontInstruction" src="{{setDetail.setInstructions[imgSelected].frontPageInfo}}" alt="" />
</div>
</div>
<span class="download-size">{{'DOWNLOAD_SIZE' | translate}}: {{setDetail.setInstructions[imgSelected].downloadSize}}</span><br>
<a class="instruction-id" target="_blank" href="{{setDetail.setInstructions[imgSelected].instruction}}"><button md-raised-button color="primary">
<md-icon>file_download</md-icon>
{{'SEE_INSTRUCTION' | translate}}</button></a><br>
<p>
{{'INSTRUCTION_TEXT_1' | translate}}
</p>
<p>
{{'INSTRUCTION_TEXT_2' | translate}}
</p>
</div>
</md-card-content>
</md-card>
</div>
<div id="target">
<md-card class="setParts" *ngIf="setParts">
<div class="btn" fxFlex fxLayoutAlign="center">
<button class="btn-toggle" md-raised-button color="primary" (click)="toggleButton()">Toggle</button>
</div>
<div *ngIf="setParts.results.length > 0">
<div class="btn" fxFlex fxLayoutAlign="center">
<button class="btn-page" md-raised-button [disabled]="buttonStatePrev()" (click)="page(0)">{{'PREV' | translate}}</button>
<button class="btn-page" md-raised-button [disabled]="buttonStateNext()" (click)="page(1)">{{'NEXT' | translate}}</button>
</div>
<md-grid-list cols="6">
<md-grid-tile *ngFor="let part of setParts.results; let last = last">
{{last ? scrollToParts() : ''}}
<div style="width:50%;">
<img style="width:100%;" src="{{part.colorPart.image}}" alt="" />
</div>
<md-grid-tile-footer [style.background-color]="changeBackground(part)" [style.color]="changeColor(part)">
<div fxFlex="100">
<p class="left">
<span *ngIf="part.isSpare">
In set
</span>
<span *ngIf="!part.isSpare">
Spare
</span>
</p>
<p class="right">
/ {{part.number}}
</p>
<select style="margin-top:1em;" class="nb-missing right" name="" (change)="onChange(part, $event.target.value)">
<option *ngFor="let i of part.number | myDemoNumber" [selected]="isMissing(part, i) == true">{{i}}</option>
</select>
<p class="right">
Missing:
</p>
</div>
</md-grid-tile-footer>
</md-grid-tile>
</md-grid-list>
<div class="btn" fxFlex fxLayoutAlign="center">
<button class="btn-page" md-raised-button [disabled]="buttonStatePrev()" (click)="page(0)">{{'PREV' | translate}}</button>
<button class="btn-page" md-raised-button [disabled]="buttonStateNext()" (click)="page(1)">{{'NEXT' | translate}}</button>
</div>
</div>
<md-card-content *ngIf="update && setParts.results.length <= 0">Your set is full</md-card-content>
</md-card>
</div>
</div>
<div class="error" *ngIf="errorMessage">{{errorMessage}}</div>
和组件:
import { Component, ViewChild, OnInit } from '@angular/core';
import { ActivatedRoute, Params, Router } from '@angular/router';
import { Location } from '@angular/common';
import { SetDetail } from './setDetail';
import { SetParts, Part } from './setParts';
import { NewSet } from './newSet';
import { Res } from './res';
import { Set } from './set';
import { SetService } from './set.service';
import { Auth } from '../auth/auth.service';
@Component({
selector: 'setDetail',
templateUrl: 'set.component.html',
styleUrls: ['set.component.css'],
providers: [SetService]
})
export class SetComponent implements OnInit {
public setDetail?: SetDetail;
public setParts?: SetParts;
public errorMessage: string;
public idSet?: string;
public isInstructions: string = 'Il n\'y a pas d\'instructions disponible.';
public isView: boolean = true;
public pag: number = 0;
public model: NewSet;
public sended?: NewSet;
public submitted: boolean = false;
public tata: {[ key: string ]: Res} = {};
public set?: Set;
public mySetParts: SetParts = {count: 0, previous: null, next: null, results: []};
public first: boolean = true;
public imgSelected: number = 0;
public shouldDoIt = true;
public update: boolean = false;
constructor(private setService: SetService,
private activatedRoute: ActivatedRoute,
private router: Router,
private location: Location,
private auth: Auth) {
}
public goToDetail(colorPart: Part): void {
let link = ['/colorPart', colorPart.colorPart.part.idPart, colorPart.colorPart.color.color];
this.router.navigate(link);
}
public getSetDetail(): void {
this.setService.getSetDetail(this.idSet).then((setDetail) => {
this.setDetail = setDetail;
if (this.setDetail.setInstructions.length !== 0) {
this.isInstructions = 'Instructions';
}
},
(error) => this.errorMessage = <any> error);
if (this.auth.authenticated()) {
this.setService.getMySet(this.idSet).subscribe((setList) => {
if (setList.count > 0) {
this.update = true;
this.model.box = setList.results[0].box;
this.model.instruction = setList.results[0].instruction;
this.model.note = setList.results[0].note;
this.model.status = setList.results[0].status;
this.model.forPart = setList.results[0].forPart;
}
},
(error) => this.errorMessage = <any> error);
}
};
public deleted(set: SetDetail) {
this.setService.deleteSet(set.idSet)
.subscribe((value) => {
this.update = false;
this.initForm();
},
(error) => this.errorMessage = <any> error);
}
public goBack(): void {
this.location.back();
}
public getSetParts(): void {
this.setService.getSetParts(this.idSet)
.subscribe((setParts) => {
this.setParts = setParts;
},
(error) => this.errorMessage = <any> error
);
this.getMySetParts();
}
public getMySetParts(): void {
if (this.auth.authenticated()) {
this.setService.getMySetParts(this.idSet).then((MySetParts) => {
this.mySetParts.count = MySetParts.count;
for (let part of MySetParts.results) {
this.mySetParts.results.push(part.setPart);
let obj: Res = {setPart: part.setPart, number: part.number};
this.tata[part.setPart.colorPart.color.color.toString()
+ part.setPart.colorPart.part.idPart.toString()] = obj;
}
;
},
(error) => this.errorMessage = <any> error);
}
}
public page(n: number): void {
if (n) {
this.setService.page(this.setParts.next)
.subscribe((setParts) => this.setParts = setParts,
(error) => this.errorMessage = <any> error);
this.pag += 1;
} else {
this.setService.page(this.setParts.previous)
.subscribe((setParts) => this.setParts = setParts,
(error) => this.errorMessage = <any> error);
this.pag -= 1;
}
}
public onSubmit(): void {
if (this.submitted === true) {
return;
}
let test: Res[] = [];
for (let key in this.tata) {
if (this.tata.hasOwnProperty(key)) {
test.push(this.tata[key]);
}
}
this.model.mySetParts = test;
this.submitted = true;
if (this.update === true) {
this.setService.updateSet(this.model).subscribe(
(data) => {
this.sended = data;
this.getSetDetail();
this.update = true;
this.submitted = false;
this.sended = null;
},
(error) => {
this.submitted = false;
this.errorMessage = <any> error;
}
);
} else {
this.setService.addSet(this.model).subscribe(
(data) => {
this.sended = data;
this.getSetDetail();
this.update = true;
this.submitted = false;
this.sended = null;
},
(error) => {
this.submitted = false;
this.errorMessage = <any> error;
}
);
}
}
public isMissing(part: Part, i: number): boolean {
if (this.tata[part.colorPart.color.color.toString() +
part.colorPart.part.idPart.toString()] &&
this.tata[part.colorPart.color.color.toString() +
part.colorPart.part.idPart.toString()].number === i) {
return true;
}
return false;
}
public onChange(setPart: Part, nbr: number): void {
let obj: Res = {setPart, number: nbr};
this.tata[setPart.colorPart.color.color.toString() +
setPart.colorPart.part.idPart.toString()] = obj;
}
public buttonStateNext(): boolean {
return this.setParts.next === null;
}
public buttonStatePrev(): boolean {
return this.setParts.previous === null;
}
public toggleButton(): void {
let tmp: SetParts;
tmp = this.setParts;
this.setParts = this.mySetParts;
this.mySetParts = tmp;
}
public imgClicked(event: any, id: number): void {
this.imgSelected = id;
}
public isSelected(id: number): boolean {
if (this.imgSelected === id || (this.imgSelected === id && id === 0)) {
return true;
}
return false;
}
public changeBackground(part: Part): string {
if (part.colorPart.color.rgb) {
if (part.colorPart.color.rgb === 'FFFFFF') {
return '#f2f2f2';
} else {
return '#' + part.colorPart.color.rgb;
}
}
return null;
}
public changeColor(part: Part): string {
if (part.colorPart.color.rgb === 'FFFFFF') {
return '#000000';
}
return null;
}
public ngOnInit(): void {
this.activatedRoute.params.forEach((params: Params) => {
this.idSet = params['id_set']; // (+) converts string 'id' to a number
});
this.initForm();
this.getSetDetail();
}
private initForm(): void {
this.set = {
idSet: this.idSet, year: null, nbParts: null,
theme: null, name: null, image: null
};
this.model = new NewSet(this.set, false, false, false, '', 0, []);
}
}
已解决: 问题来自实施不当的提供商。修复后因为我觉得很丑,这个问题自己解决了
已解决:问题来自实施不当的提供商。修复后因为我觉得很丑,这个问题自己解决了
我用 webpack seed 创建了一个应用程序,但现在我想在 aot 中编译产品,我得到了 UserError.Error 并且不知道如何修复它
这发生在 webpack 构建期间 angular 编译之后。
这是错误:
正在使用 angular 编译器开始编译。 Angular 编译完成,开始 webpack 打包。 错误:D:/Projets/sites/brick_reader_front/compiled/src/app/set/set.component.ngfactory.ts:2848:52 处的错误:提供的参数与调用目标的任何签名都不匹配。 在 UserError.Error(本地) 在新的 UserError (D:\Projets\sites\brick_reader_front\node_modules\tools\@angular\tsc-wrapped\src\tsc.ts:33:25) 检查时 (D:\Projets\sites\brick_reader_front\node_modules\tools\@angular\tsc-wrapped\src\tsc.ts:69:11) 在 Tsc.typeCheck (D:\Projets\sites\brick_reader_front\node_modules\tools\@angular\tsc-wrapped\src\tsc.ts:152:5) 在 D:\Projets\sites\brick_reader_front\node_modules\tools\@angular\tsc-wrapped\src\main.ts:68:11 在 process._tickCallback (internal/process/next_tick.js:103:7)
如果需要任何帮助我修复它,请告诉我
谢谢!
编辑:
这是html:
<div class="app-content">
<h2 fxFlex fxLayoutAlign="center">{{'SET_DETAIL' | translate}}</h2>
<div class="btn" fxFlex fxLayoutAlign="center">
<button class="btn-back" md-raised-button (click)="goBack()">{{'BACK' | translate}}</button>
</div>
<div fxLayout.gt-md="row" fxLayoutWrap="wrap" fxLayoutAlign="space-around" fxLayout.xs="column">
<md-card class="setDetail" *ngIf="setDetail" fxLayout="row" fxLayout="column" fxLayoutWrap="wrap" fxLayoutAlign="space-around " fxFlex="30">
<md-card-header>
<img md-card-avatar src="{{setDetail.image}}" alt="" />
<md-card-title-group>
<md-card-title>
{{setDetail.name}}
</md-card-title>
<md-card-subtitle>
{{setDetail.idSet}}
</md-card-subtitle>
</md-card-title-group>
</md-card-header>
<md-card-content style="text-align: center;">
<div fxFlex="50" class="ml">
<md-icon class="left">bookmark_border</md-icon>
<p class="left">
{{setDetail.theme}}
</p>
</div>
<div fxFlex="50" class="mr">
<md-icon class="right">date_range</md-icon>
<p class="right" style="margin-right: 2px;">
{{setDetail.year}}
</p>
</div>
<hr />
<md-icon class="left">view_quilt</md-icon>
<p class="left">
{{setDetail.number}} {{'PARTS' | translate}}
</p>
<span *ngIf="auth.authenticated()">
<p class="right" *ngIf="update && model && model.status > 0">
{{model.status}} missing parts
</p>
<p class="right" *ngIf="update && model && model.status == 0">
Set full
</p>
<p class="right" *ngIf="!update">
Don't own
</p>
</span>
</md-card-content>
<md-card-actions class="btn" align="center">
<button class="btn-actions" md-raised-button color="primary" *ngIf="isView" (click)="getSetParts(); isView = false">{{'SEE_PARTS' | translate}}</button>
</md-card-actions>
<md-card>
<md-card-title *ngIf="update" fxFlex fxLayoutAlign="center">
{{'UPDATE_SET' | translate}}
</md-card-title>
<md-card-title *ngIf="!update" fxFlex fxLayoutAlign="center">
{{'ADD_SET' | translate}}
</md-card-title>
<md-card-content>
<div *ngIf="!sended && submitted" fxFlex fxLayoutAlign="center">
<md-progress-spinner mode="indeterminate"></md-progress-spinner>
</div>
<div *ngIf="sended" fxFlex fxLayoutAlign="center">
<h3>{{'SET_SAVED' | translate}}</h3>
</div>
<div *ngIf="!sended && !submitted">
<form fxFlex fxLayoutWrap="wrap" align="left" fxLayout="column">
<md-checkbox [(ngModel)]="model.instruction" name="instruction">
{{'INSTRUCTION' | translate}}
</md-checkbox>
<md-checkbox [(ngModel)]="model.box" name="box">
{{'BOX' | translate}}
</md-checkbox>
<md-checkbox [(ngModel)]="model.forPart" name="forPart">
{{'FOR_PARTS' | translate}}
</md-checkbox>
<md-input-container class="example-full-width">
<textarea mdInput style="width:100%;" id="comment" placeholder="{{'COMMENT' | translate}}" [(ngModel)]="model.note" name="comment"></textarea>
</md-input-container>
</form>
</div>
<md-card-actions *ngIf="!sended" align="center">
<button *ngIf="!update" class="btn-actions" md-raised-button color="accent" (click)="onSubmit()">{{'SUBMIT' | translate}}</button>
<button *ngIf="update" class="btn-actions" md-raised-button color="accent" (click)="onSubmit()">{{'UPDATE' | translate}}</button>
<button class="btn-actions" md-raised-button color="accent" *ngIf="update" (click)="deleted(setDetail)">{{'DELETE' | translate}}</button>
</md-card-actions>
</md-card-content>
</md-card>
</md-card>
<md-card fxLayoutAlign="space-around center" fxFlex="30">
<div fxFlex="100">
<img *ngIf="setDetail" md-card-image src="{{setDetail.image}}" alt="" />
</div>
</md-card>
<md-card *ngIf="setDetail && setDetail.setInstructions && setDetail.setInstructions.length > 0" fxFlex.gt-md="30" fxFlex>
<md-card-content style="text-align: center;">
<md-card-title style="text-align: center;">
{{ isInstructions }}
</md-card-title>
<div fxLayout="row" fxLayoutAlign="space-around" *ngIf="setDetail && setDetail.setInstructions" class="set_instruction">
<div fxFlex="20" *ngFor="let instruction of setDetail.setInstructions; let id=index">
<a>
<img src="{{instruction.frontPageInfo}}" alt="" fxFlex (click)="imgClicked($event.target, id)" [class.highlight]="isSelected(id)" />
<!--</span>--><br>
</a>
</div>
</div>
<md-divider></md-divider>
<div fxLayout="column" *ngIf="imgSelected >= 0 && setDetail && setDetail.setInstructions && setDetail.setInstructions.length > 0">
<div fxLayout="row" fxFlex="100">
<div fxFlex="100">
<img class="frontInstruction" src="{{setDetail.setInstructions[imgSelected].frontPageInfo}}" alt="" />
</div>
</div>
<span class="download-size">{{'DOWNLOAD_SIZE' | translate}}: {{setDetail.setInstructions[imgSelected].downloadSize}}</span><br>
<a class="instruction-id" target="_blank" href="{{setDetail.setInstructions[imgSelected].instruction}}"><button md-raised-button color="primary">
<md-icon>file_download</md-icon>
{{'SEE_INSTRUCTION' | translate}}</button></a><br>
<p>
{{'INSTRUCTION_TEXT_1' | translate}}
</p>
<p>
{{'INSTRUCTION_TEXT_2' | translate}}
</p>
</div>
</md-card-content>
</md-card>
</div>
<div id="target">
<md-card class="setParts" *ngIf="setParts">
<div class="btn" fxFlex fxLayoutAlign="center">
<button class="btn-toggle" md-raised-button color="primary" (click)="toggleButton()">Toggle</button>
</div>
<div *ngIf="setParts.results.length > 0">
<div class="btn" fxFlex fxLayoutAlign="center">
<button class="btn-page" md-raised-button [disabled]="buttonStatePrev()" (click)="page(0)">{{'PREV' | translate}}</button>
<button class="btn-page" md-raised-button [disabled]="buttonStateNext()" (click)="page(1)">{{'NEXT' | translate}}</button>
</div>
<md-grid-list cols="6">
<md-grid-tile *ngFor="let part of setParts.results; let last = last">
{{last ? scrollToParts() : ''}}
<div style="width:50%;">
<img style="width:100%;" src="{{part.colorPart.image}}" alt="" />
</div>
<md-grid-tile-footer [style.background-color]="changeBackground(part)" [style.color]="changeColor(part)">
<div fxFlex="100">
<p class="left">
<span *ngIf="part.isSpare">
In set
</span>
<span *ngIf="!part.isSpare">
Spare
</span>
</p>
<p class="right">
/ {{part.number}}
</p>
<select style="margin-top:1em;" class="nb-missing right" name="" (change)="onChange(part, $event.target.value)">
<option *ngFor="let i of part.number | myDemoNumber" [selected]="isMissing(part, i) == true">{{i}}</option>
</select>
<p class="right">
Missing:
</p>
</div>
</md-grid-tile-footer>
</md-grid-tile>
</md-grid-list>
<div class="btn" fxFlex fxLayoutAlign="center">
<button class="btn-page" md-raised-button [disabled]="buttonStatePrev()" (click)="page(0)">{{'PREV' | translate}}</button>
<button class="btn-page" md-raised-button [disabled]="buttonStateNext()" (click)="page(1)">{{'NEXT' | translate}}</button>
</div>
</div>
<md-card-content *ngIf="update && setParts.results.length <= 0">Your set is full</md-card-content>
</md-card>
</div>
</div>
<div class="error" *ngIf="errorMessage">{{errorMessage}}</div>
和组件:
import { Component, ViewChild, OnInit } from '@angular/core';
import { ActivatedRoute, Params, Router } from '@angular/router';
import { Location } from '@angular/common';
import { SetDetail } from './setDetail';
import { SetParts, Part } from './setParts';
import { NewSet } from './newSet';
import { Res } from './res';
import { Set } from './set';
import { SetService } from './set.service';
import { Auth } from '../auth/auth.service';
@Component({
selector: 'setDetail',
templateUrl: 'set.component.html',
styleUrls: ['set.component.css'],
providers: [SetService]
})
export class SetComponent implements OnInit {
public setDetail?: SetDetail;
public setParts?: SetParts;
public errorMessage: string;
public idSet?: string;
public isInstructions: string = 'Il n\'y a pas d\'instructions disponible.';
public isView: boolean = true;
public pag: number = 0;
public model: NewSet;
public sended?: NewSet;
public submitted: boolean = false;
public tata: {[ key: string ]: Res} = {};
public set?: Set;
public mySetParts: SetParts = {count: 0, previous: null, next: null, results: []};
public first: boolean = true;
public imgSelected: number = 0;
public shouldDoIt = true;
public update: boolean = false;
constructor(private setService: SetService,
private activatedRoute: ActivatedRoute,
private router: Router,
private location: Location,
private auth: Auth) {
}
public goToDetail(colorPart: Part): void {
let link = ['/colorPart', colorPart.colorPart.part.idPart, colorPart.colorPart.color.color];
this.router.navigate(link);
}
public getSetDetail(): void {
this.setService.getSetDetail(this.idSet).then((setDetail) => {
this.setDetail = setDetail;
if (this.setDetail.setInstructions.length !== 0) {
this.isInstructions = 'Instructions';
}
},
(error) => this.errorMessage = <any> error);
if (this.auth.authenticated()) {
this.setService.getMySet(this.idSet).subscribe((setList) => {
if (setList.count > 0) {
this.update = true;
this.model.box = setList.results[0].box;
this.model.instruction = setList.results[0].instruction;
this.model.note = setList.results[0].note;
this.model.status = setList.results[0].status;
this.model.forPart = setList.results[0].forPart;
}
},
(error) => this.errorMessage = <any> error);
}
};
public deleted(set: SetDetail) {
this.setService.deleteSet(set.idSet)
.subscribe((value) => {
this.update = false;
this.initForm();
},
(error) => this.errorMessage = <any> error);
}
public goBack(): void {
this.location.back();
}
public getSetParts(): void {
this.setService.getSetParts(this.idSet)
.subscribe((setParts) => {
this.setParts = setParts;
},
(error) => this.errorMessage = <any> error
);
this.getMySetParts();
}
public getMySetParts(): void {
if (this.auth.authenticated()) {
this.setService.getMySetParts(this.idSet).then((MySetParts) => {
this.mySetParts.count = MySetParts.count;
for (let part of MySetParts.results) {
this.mySetParts.results.push(part.setPart);
let obj: Res = {setPart: part.setPart, number: part.number};
this.tata[part.setPart.colorPart.color.color.toString()
+ part.setPart.colorPart.part.idPart.toString()] = obj;
}
;
},
(error) => this.errorMessage = <any> error);
}
}
public page(n: number): void {
if (n) {
this.setService.page(this.setParts.next)
.subscribe((setParts) => this.setParts = setParts,
(error) => this.errorMessage = <any> error);
this.pag += 1;
} else {
this.setService.page(this.setParts.previous)
.subscribe((setParts) => this.setParts = setParts,
(error) => this.errorMessage = <any> error);
this.pag -= 1;
}
}
public onSubmit(): void {
if (this.submitted === true) {
return;
}
let test: Res[] = [];
for (let key in this.tata) {
if (this.tata.hasOwnProperty(key)) {
test.push(this.tata[key]);
}
}
this.model.mySetParts = test;
this.submitted = true;
if (this.update === true) {
this.setService.updateSet(this.model).subscribe(
(data) => {
this.sended = data;
this.getSetDetail();
this.update = true;
this.submitted = false;
this.sended = null;
},
(error) => {
this.submitted = false;
this.errorMessage = <any> error;
}
);
} else {
this.setService.addSet(this.model).subscribe(
(data) => {
this.sended = data;
this.getSetDetail();
this.update = true;
this.submitted = false;
this.sended = null;
},
(error) => {
this.submitted = false;
this.errorMessage = <any> error;
}
);
}
}
public isMissing(part: Part, i: number): boolean {
if (this.tata[part.colorPart.color.color.toString() +
part.colorPart.part.idPart.toString()] &&
this.tata[part.colorPart.color.color.toString() +
part.colorPart.part.idPart.toString()].number === i) {
return true;
}
return false;
}
public onChange(setPart: Part, nbr: number): void {
let obj: Res = {setPart, number: nbr};
this.tata[setPart.colorPart.color.color.toString() +
setPart.colorPart.part.idPart.toString()] = obj;
}
public buttonStateNext(): boolean {
return this.setParts.next === null;
}
public buttonStatePrev(): boolean {
return this.setParts.previous === null;
}
public toggleButton(): void {
let tmp: SetParts;
tmp = this.setParts;
this.setParts = this.mySetParts;
this.mySetParts = tmp;
}
public imgClicked(event: any, id: number): void {
this.imgSelected = id;
}
public isSelected(id: number): boolean {
if (this.imgSelected === id || (this.imgSelected === id && id === 0)) {
return true;
}
return false;
}
public changeBackground(part: Part): string {
if (part.colorPart.color.rgb) {
if (part.colorPart.color.rgb === 'FFFFFF') {
return '#f2f2f2';
} else {
return '#' + part.colorPart.color.rgb;
}
}
return null;
}
public changeColor(part: Part): string {
if (part.colorPart.color.rgb === 'FFFFFF') {
return '#000000';
}
return null;
}
public ngOnInit(): void {
this.activatedRoute.params.forEach((params: Params) => {
this.idSet = params['id_set']; // (+) converts string 'id' to a number
});
this.initForm();
this.getSetDetail();
}
private initForm(): void {
this.set = {
idSet: this.idSet, year: null, nbParts: null,
theme: null, name: null, image: null
};
this.model = new NewSet(this.set, false, false, false, '', 0, []);
}
}
已解决: 问题来自实施不当的提供商。修复后因为我觉得很丑,这个问题自己解决了
已解决:问题来自实施不当的提供商。修复后因为我觉得很丑,这个问题自己解决了