我有这段代码,我需要动态更改数据。所以我决定为此使用流。问题是它似乎在复制流,但它不起作用......有没有办法将它传递到那里?或者如果可能的话,也许还有其他解决方案?对于任何反馈,我们都表示感谢。
仓库堆栈组件.ts
import { CdkDragEnd, CdkDragStart } from '@angular/cdk/drag-drop';
import { Component, Input, OnChanges, OnInit, SimpleChanges } from '@angular/core';
import { MatDialog, MatDialogRef } from '@angular/material/dialog';
import { StackPalletsComponent } from '../modals/stack-pallets/stack-pallets.component';
import { MainServiceService } from '../services/main-service.service';
import { Observable, interval, BehaviorSubject, Subject } from 'rxjs';
import { Pallet } from '../models/pallet';
@Component({
selector: 'app-warehouse-stack',
templateUrl: './warehouse-stack.component.html',
styleUrls: ['./warehouse-stack.component.css']
})
export class WarehouseStackComponent implements OnInit{
@Input() warehouseStackID = null;
@Input() name = null;
@Input() position = null;
@Input() set pallets(pallets:Pallet[]) {
this.pallets$.next(pallets);
}
public pallets$:BehaviorSubject<Pallet[]> = new BehaviorSubject<Pallet[]>([]);
public dialogRef: MatDialogRef<StackPalletsComponent>;
constructor(public mainService:MainServiceService,public dialog:MatDialog) { }
public dragging:boolean;
ngOnInit(): void {
}
updatePosition(e: CdkDragEnd) {
this.mainService.updateStackPosition(this.warehouseStackID, e.source.getFreeDragPosition().x, e.source.getFreeDragPosition().y)
}
public handleDragStart(event: CdkDragStart): void {
this.dragging = true;
}
openDialog() {
this.dialogRef = this.dialog.open(StackPalletsComponent, {
data: {
warehouseStackID: this.warehouseStackID,
pallets$: this.pallets$
}
});
}
handleClick(event: MouseEvent): void {
if (this.dragging) {
this.dragging = false;
return
}
this.openDialog();
}
}
堆栈托盘组件.ts
import { Component, Inject, OnInit } from '@angular/core';
import { MatDialog, MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';
import { Pallet } from 'src/app/models/pallet';
import { MainServiceService } from 'src/app/services/main-service.service';
import { CreatePalletComponent } from '../create-pallet/create-pallet.component';
@Component({
selector: 'app-stack-pallets',
templateUrl: './stack-pallets.component.html',
styleUrls: ['./stack-pallets.component.css']
})
export class StackPalletsComponent implements OnInit {
constructor(public mainService:MainServiceService, public dialogRef:MatDialogRef<StackPalletsComponent>, public dialog:MatDialog,@Inject(MAT_DIALOG_DATA) public data: {warehouseStackID: number, pallets$:any}) { }
ngOnInit(): void {
}
showCreationModal() {
this.dialog.open(CreatePalletComponent, {
data: {
isStackPallet: true,
warehouseStackID: this.data.warehouseStackID
}
})
}
}
堆栈托盘组件.html
<div class="pallets">
<app-pallet *ngFor="let pallet of this.data.pallets$|async" [position]="{x:pallet.positionX, y:pallet.positionY}" [pallet]="pallet"></app-pallet>
<div class="cubeRow">
<div class="cube"></div>
<div class="cube"></div>
</div>
<div class="cubeRow">
<div class="cube"></div>
<div class="cube"></div>
</div>
<div class="cubeRow">
<div class="cube"></div>
<div class="cube"></div>
</div>
<div class="buttons">
<button class="btn-floating btn-large waves-effect waves-light red" style="margin-top: 5px;" (click)="showCreationModal()"><i class="material-icons">add</i></button>
</div>
</div>