首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >阵列更改时的更新

阵列更改时的更新
EN

Stack Overflow用户
提问于 2020-01-22 00:21:30
回答 1查看 43关注 0票数 0

如果我将一个对象添加到原始类之外的objectListDrawArea数组中,它将被添加,但我的* ngFor找不到该对象。我完全不知道如何解决这个问题,我应该使用Observable吗,如果是的话,你能在评论中留下一个例子吗?谢谢

ao-bar.component.ts

代码语言:javascript
复制
import { AoBarService } from './ao-bar.service';
import { DrawAreaComponent } from '../../../draw-area/draw-area/draw-area.component';

@Component({
  selector: 'app-ao-bar',
  templateUrl: './ao-bar.component.html',
  styleUrls: ['./ao-bar.component.sass']
})
export class AoBarComponent implements OnInit {

  objectsList: object[] = new Array();

  showObjectsList: boolean;

  drawAreaComponent: DrawAreaComponent = new DrawAreaComponent();

  constructor(private service: AoBarService) { 
    this.service.getObject(this.objectsList);
  }

  ngOnInit() {
    console.log(this.objectsList, ' AoBarComponent');
  }

  private onShowObjectsList() {
    this.showObjectsList = !this.showObjectsList;
  }

  public onDragEnd(event: DragEvent): void {
    console.log('drag end', event);   

    if (this.drawAreaComponent.onDragEnter) {

      for (let object of this.objectsList) {

        if (object.name == event.path[0].nextElementSibling.innerText) {

          object.settings.x = event.x;
          object.settings.y = event.y;

          this.drawAreaComponent.createObject(object);
        }
      }  
    }
  }


}

draw-draw_COMPOMENT.TS:

代码语言:javascript
复制
import { Component, OnInit } from '@angular/core';
import { CdkDragEnd } from '@angular/cdk/drag-drop';

@Component({
  selector: 'app-draw-area',
  templateUrl: './draw-area.component.html',
  styleUrls: ['./draw-area.component.sass']
})
export class DrawAreaComponent implements OnInit {

  objectsList: object[] = new Array();

  constructor() {

  }

  ngOnInit() {

  }

  public onDragEnter(event: DragEvent): boolean {
    console.log('drag enter', event);

    return true;
  }

  public onDragEnd(event: CdkDragEnd): void {
    console.log(event);
  }

  public createObject(objectToCreate: object): void {
    this.objectsList.push(objectToCreate);

    console.log(`Aktuelle Liste: ${this.objectsList}`);
  }
}

draw-ARIA.COMPOMENT.html:

代码语言:javascript
复制
<div id="DrawAreaComponent">
  <div 
    class="example-boundary"
    (dragenter)="onDragEnter($event)"  
  >

    <div 
      id="ContainerObject" 
      *ngFor="let object of objectsList | async"
      cdkDragBoundary=".example-boundary"
      cdkDrag
      (cdkDragEnded)="onDragEnd($event)"
    >
      <img id="ImgObject" [src]="object.imgUrl">
    </div> 
  </div>
</div>
EN

回答 1

Stack Overflow用户

发布于 2020-01-22 04:12:34

这是一个变化检测问题。

代替this.objectsList.push(objectToCreate);

使用this.objectsList = [...this.objectsList, objectToCreate];就可以了。

阅读有关更改检测的信息。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59845265

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档