我正在尝试创建一个存储来管理我的数据,然后在我的组件中使用该存储。应用程序是用 Ionic2 和 Angular2 构建的。
更新
这是我如何建模数据存储的链接https://coryrylan.com/blog/angular-2-observable-data-services
我遇到的麻烦是更新可观察对象中的对象。
这里是商店
export class MessageService {
messages$: Observable<Message[]>;
update() {
//...code to make http call and set `this.messages$`
}
setMessageFlag(msg: Message) {
//post to server, nothing more, nothing returned
}
}
现在我的组件注入了这个服务
export class Inbox OnInit {
messages$: Observable<Messages[]>
constructor(private $messageService: MessageService) {
this.messages$ = this.$messageService.messages$;
}
flagMessage(msg: Message) {
msg.isNew = !msg.isNew;
this.$messageService.setMessageFlag(msg); //makes a http call to set the message flag
}
ngOnInit() {
this.$messageService.update();
}
}
async
然后我的模板使用管道消耗 observable
<div *ngFor="let message of messages$ | async">
<h2 [ngClass]="{'is-read': message.isNew}">{{message.title}}</h2>
<button (click)="flag(message)">{{message.isNew ? 'Mark as read' : 'Mark as unread'}}</button>
</div>
现在对于我感到困惑的部分。
flagMessage(msg: Message) {
msg.isNew = !msg.isNew;
this.$messageService.setMessageFlag(msg);
}
单击按钮并flagMessage(message)
调用方法时,它会设置msg.isNew
, 并对服务器进行 http 调用。我看到is-new
该类应用于<h2>
,但随后它很快恢复为原始值。
我不想再次调用从服务器获取所有消息。这似乎效率低下。我在想 Observable 正在返回一个副本,但我不确定。
最近对我来说这是一个学习曲线。我已经在上个月开始使用 Angular2、Typescript2、Rxjs 和 Ionic2,因此感谢您的帮助。