我目前正在创建一个Ionic笔记应用程序,我将允许用户使用reorderArray()函数重新排列列表中的项目。但是,我正在使用Firebase,因此我在this.notesList上收到此错误。
类型'Observable'的参数不能赋值给 输入'any []'。 “Observable”类型中缺少属性“length”。
我不确定如何在Firebase中使用它,所以任何事情都会有所帮助。这是我的代码:
HTML:
<div *ngIf="editmode">
<ion-list reorder="true" (ionItemReoder)="reorderItem($event)">
<ion-item *ngFor="let note of notesList | async">
<ion-checkbox (ionChange)="addToTrash(note.id)"></ion-checkbox>
<ion-label>
<h1>{{ note.name }}</h1>
<span>{{ note.note_date | date: 'shortDate' }}</span>
<span>{{ note.text }}</span>
<span>{{ (notesList | async)?.length }}</span>
</ion-label>
</ion-item>
</ion-list>
</div>
打字稿:
export class NotesPage {
notesList: Observable<any>;
editmode: boolean = false;
trash = [];
constructor(
public navCtrl: NavController,
public navParams: NavParams,
public database: AngularFireDatabase,
public loadingCtrl: LoadingController,
public alertCtrl: AlertController
) {
this.loadNotes();
}
loadNotes() {
const loader = this.loadingCtrl.create();
loader.present().then( () => {
this.notesList = this.database.list('/notes').valueChanges();
loader.dismiss();
})
}
reorderItem( indexes ) {
this.notesList = reorderArray(this.notesList, indexes);
}
}
答案 0 :(得分:0)
this.notesList
是 Observable 。 reorderItems
只能订购 array-likes 。所以这样的事情应该可以解决问题。
notesList: any[];
[...]
loadNotes() {
const loader = this.loadingCtrl.create();
Observable.fromPromise(loader.present()).switchMap(() => { //1
return this.database.list('/notes').valueChanges(); //2
}).subscribe((list) => { //3
this.notesList = list; //4
loader.dismiss();
});
}
reorderItem( indexes ) {
this.notesList = reorderArray(this.notesList, indexes);
}
loader.present
&#34; rxjs方式&#34; .valueChanges()
返回一个Observable。 修改强>
<span>{{ (notesList | async)?.length }}</span>
必须
<span>{{ notesList?.length }}</span>
因为notesList
不是异步(再)。
有(至少)两种显示通过可观察管道流式传输的值的方法。一个是模板中的异步管道,一个是我解释的方式。异步管道订阅引擎盖下的observable并返回值。但是使用管道,您可以轻松地对物品进行重新排序。