Angular 使用角度可观测或事件发射器;普通的;对象;?

Angular 使用角度可观测或事件发射器;普通的;对象;?,angular,observable,Angular,Observable,我正试着让自己的头脑清醒过来,无论出于什么原因,我花了几个小时在谷歌上搜索,结果都不清晰(可能是因为我没吃午饭)。我正在尝试一个原型文件上传小部件开始 以下是我目前掌握的情况: 文件-一个简单的类,有几个属性,其中一些属性是有状态的(例如上载状态) “FileComponent”-用于呈现文件的组件 “FileListComponent”-包含文件数组属性的组件 我需要能够做到以下几点: 当用户在FileListComponent上进行拖放操作时,实例化新的文件对象 在文件对象上载时更新其状

我正试着让自己的头脑清醒过来,无论出于什么原因,我花了几个小时在谷歌上搜索,结果都不清晰(可能是因为我没吃午饭)。我正在尝试一个原型文件上传小部件开始

以下是我目前掌握的情况:

  • 文件-一个简单的类,有几个属性,其中一些属性是有状态的(例如上载状态)
  • “FileComponent”-用于呈现文件的组件
  • “FileListComponent”-包含文件数组属性的组件
我需要能够做到以下几点:

  • 当用户在FileListComponent上进行拖放操作时,实例化新的文件对象
  • 在文件对象上载时更新其状态
  • 当FileComponent的相应文件的状态更改时,使其视图刷新
  • FileListComponent的模板如下所示:

    <div class="file-list">
        <file-comp *ngFor="let file of files" [file]="file"></file-comp>
    <div>
    
    <div class="file">
        <div>{{ file.filename }}</div>
        <div>{{ file.status }}</div>
    <div>
    
    
    
    FileComponent的模板如下所示:

    <div class="file-list">
        <file-comp *ngFor="let file of files" [file]="file"></file-comp>
    <div>
    
    <div class="file">
        <div>{{ file.filename }}</div>
        <div>{{ file.status }}</div>
    <div>
    
    
    {{file.filename}
    {{file.status}
    
    我可以添加新文件,它们显示在FileListComponent中,使用FileComponent呈现。到目前为止还不错

    这就是我被困的地方

    随着“file.status”的更改,我想更新FileComponent

    听起来我想利用可观察性,但我读过的大多数示例都显示了调用返回的对象的AJAX示例,而不是如何使类的单个属性可观察。此外,大多数示例将数据属性显示为组件类本身的一部分,而不是单独的对象


    有谁知道这样一个例子,我可以将一个简单的对象连接到一个组件,并在组件的渲染中反映对该对象属性的更改吗?

    EventEmitter是基于主体构建的,主体是可观察的和观察者。
    主题主要用于发送信号,不能保存值。
    像Subject这样的对象很少有:

    BehaviorSubject与Subject类似,但可以持久保存最后一个值,因此每个订阅者都可以访问最后发出的值。
    ReplaySubject-与BehaviorSubject类似,但可以根据对象的初始化保存多个发出的值


    在您的情况下,我建议使用类似BehaviorSubject的东西,这样您就可以保持当前的进度。 只需使用以下方法,即可在父组件和子组件之间共享数据:
    家长:

    <child-component 
      data="someObjectFromParnet" (somethingChange)="changeFunc($event)">
    </child-component>
    
    @Input() data;
    @Output() somethingChange = new EventEmitter();
    
    constructor(){
     console.log(data); // <-- data sent from parent.
     this.somethingChange.emit(`sending back data to parent${data}`);
    }
    
    子项:

    <child-component 
      data="someObjectFromParnet" (somethingChange)="changeFunc($event)">
    </child-component>
    
    @Input() data;
    @Output() somethingChange = new EventEmitter();
    
    constructor(){
     console.log(data); // <-- data sent from parent.
     this.somethingChange.emit(`sending back data to parent${data}`);
    }
    
    @Input()数据;
    @Output()somethingChange=neweventemitter();
    构造函数(){
    
    console.log(data);//要考虑的选项:感谢您提供了一个简洁、文档丰富的示例。我的模型中的EventEmitter帮了我的忙。在我的组件中,我将changeDetection设置为OnPush,并使用changeDetectorRef.detectChanges()触发UI更新。