Angular 使用角度可观测或事件发射器;普通的;对象;?
我正试着让自己的头脑清醒过来,无论出于什么原因,我花了几个小时在谷歌上搜索,结果都不清晰(可能是因为我没吃午饭)。我正在尝试一个原型文件上传小部件开始 以下是我目前掌握的情况:Angular 使用角度可观测或事件发射器;普通的;对象;?,angular,observable,Angular,Observable,我正试着让自己的头脑清醒过来,无论出于什么原因,我花了几个小时在谷歌上搜索,结果都不清晰(可能是因为我没吃午饭)。我正在尝试一个原型文件上传小部件开始 以下是我目前掌握的情况: 文件-一个简单的类,有几个属性,其中一些属性是有状态的(例如上载状态) “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更新。