Я пытаюсь сделать гексгрид.Таким образом, я извлекаю коллекцию гексов из firestore, сортирую их по id, перемещаю их в строку из 10 (так что первые 10 идут в 'row0', следующие 10 в 'row1' и т. Д.), И использую ngFor для их отображения.
Проблема в том, что когда я их отображаю, я получаю следующее:
row0
row1
row10
row11
row2
row3
row4
row5
row6
row7
row8
row9
так что я явно что-то упускаю.Я думаю, что они вышли из строя, но я console.logging строк и вижу их в порядке, как и ожидалось:
Rows [row0: Array (10), row1: Array (10), row2: Array(10), row3: Array (10), row4: Array (10),…] object
Я вижу, что порядок, по-видимому, основан на первом числе после 'row', но я не уверен, почему,Любые указатели будут с благодарностью!
TS:
Сервис
export class FirestoreService {
constructor(private db:AngularFirestore) { }
getHexes(){
let hexRows = []
let hexes = this.db.collection('hexes', ref=> ref.orderBy('id')).valueChanges().subscribe(data => {
data.forEach((hex, index) => {
let rowNum = Math.floor(index / 10)
if(hexRows[`row${rowNum}`] == undefined){
hexRows[`row${rowNum}`] = []
}
hexRows[`row${rowNum}`].push(hex)
})
console.log('Rows', hexRows, typeof hexRows);
})
return hexRows
}
Компонент
ngOnInit() {
this.hexRows = this.afs.getHexes()
}
HTML:
Компонент
<div *ngFor="let row of hexRows | keyvalue">
{{row.key}}
</div>
Обновление
Поэтому, следуя указаниям Деборы, я попытался использовать сравнение и случайно "исправил".Я сделал быструю тестовую функцию с именем 'orderByRowNum', и когда я проверил, запускается ли он, он выглядит так, как будто упорядочил список, как и ожидалось:
TS:
orderByRowNum = (a,b) => {
console.log('A', a);
return a
}
HTML:
<div *ngFor="let row of hexRows | keyvalue:orderByRowNum">
{{row.key}}
</div>
Это, вероятно, ужасная реализация, и я не уверен на 100%, почему она работает, но я собираюсь опубликовать ее, потому что это, по крайней мере, похоже на прогресс.