javascript - 如何通知另一个组件该方法执行

标签 javascript html angular typescript

我有四个组件,父组件 componets.html 看起来像

<div class="main">
    <div class="column-left">
        <app-document-info></app-document-info>
    </div>
    <div class="column-center" style="float:left">
        <app-document-scan></app-document-scan>
    </div>
</div>

Document-Scan 组件也包含内部组件,这是该组件的一些片段代码(Document-Nested)

<div class="btnGrp">
  <input type="file" name="img" multiple (change)="onChange($event)">
</div>

  public onChange(event: Event) {
    this.loadFiles();
  };

  loadFiles() {
    let files = event.target['files'];
    this.allFiles = files.length;

    for (var i = 0; i < files.length; i++) {
      let fileReader = new FileReader();
      fileReader.onload = () => {
        let infoFile: string = fileReader.result;
        let obj: fileStructure = {
          name: files[this.loadedFiles].name,
          data: fileReader.result,
          type: files[this.loadedFiles].type
        }
        this.listImages.push(obj);
        this.loadedFiles++;
        this.loadImage();
      }
      if (fileReader && files && files.length) {
        fileReader.readAsDataURL(files[i]);
      }
    }
  }

 loadImage() {
      this.imageService.setImages(this.listImages);
      this.imageLoadedEvent.emit(this.isClickedFileUploader);
}

我的组件 Document-info 我有一些我会在什么时候执行的方法 来自文档扫描的方法 loadFiles() 已完成或将数据传递到我使用服务在 loadImage() 方法中注入(inject)的组件

这是我的服务

    export class ImageService {
    isClicked: boolean = false;    
    listImages: fileStructure[] = [];
    bodyContent;

    setBodyRes(res) {
        this.bodyContent = res;
    }

    getBodyRes() {
        return this.bodyContent;
    }

    setImages(imageList: fileStructure[]) {
        this.listImages = imageList;
    } 

    getImages(): fileStructure[] {
        return this.listImages;
    }
}

如何在 Document-Scan 内部的组件 Document-Nested 之间传递数据或通知某些方法完成执行 和文档信息。 Document-Scan 和 Document-Info 是兄弟?

最佳答案

您可以使用多种不同的方法在组件之间进行通信,您可以在此处找到更多信息:https://angular.io/guide/component-interaction

在您的情况下,您可能希望文档扫描公开一个事件:

@Output() onLoadFilesCompleted = new EventEmitter<DataType>();

然后 parent 需要像这样订阅它

<app-document-scan [onLoadFilesCompleted]="doSomething()"></app-document-scan>

您还可以有一个允许在多个不同组件之间进行通信的注入(inject)服务,如果事情变得复杂,这对您来说可能会更容易。

关于javascript - 如何通知另一个组件该方法执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45862550/

相关文章:

Angular - 过滤 ngFor 对象的数据数组

php - 使用 Angular 5 将 POST 数据发送到 php

javascript - 使用第一个 jQuery-CSS 选项卡中的链接转到第三个选项卡并防止页面刷新时选项卡切换

javascript - 如何在 FileReader.onload 中显示 'i' (for 循环)的值

javascript - 将括号中包含多个字符串的文本解析为数组

html - 为什么用 Chrome 打印的网站使用的是移动布局?

javascript - 使用 Javascript 从 <li> 列表更新 HTML 输入字段值

angular - 手写笔- Angular 5 :angular material changing theme

javascript - 正则表达式 - 如何删除括号内的字符串?

javascript - 使用 javascript 添加 <use> 标签