Я хочу отфильтровать что-нибудь из моей базы данных Angular Firebase.Для этого я зачитал текст из div.Это дает мне текст, который должен фильтровать мою базу данных.Я передаю это значение своему сервису, где хочу использовать его как переменную и фильтрую через эту переменную, но это не работает.
Вот мой Serice:
cvSkillCollectionFilter: AngularFirestoreCollection<IntCvSkill>;
cvSkillCollectionFilterAnwenden: AngularFirestoreCollection<IntCvSkill>;
cvSkillFilter: Observable<IntCvSkill[]>;
cvSkillFilterAnwenden: Observable<IntCvSkill[]>;
filterWert: string;
constructor(public afs: AngularFirestore) {
this.filterWert = 'Entwicklung';
this.cvSkillCollectionFilter = this.afs.collection('cv-skill', ref => ref.where('skillGruppe', '==', this.filterWert));
this.cvSkillCollectionFilterAnwenden = this.afs.collection('cv-skill');
this.cvSkillFilter = this.cvSkillCollectionFilter.snapshotChanges().pipe(map(changes => {
return changes.map(a => {
const data = a.payload.doc.data() as IntCvSkill;
data.id = a.payload.doc.id;
return data;
});
}));
this.cvSkillFilterAnwenden = this.cvSkillCollectionFilterAnwenden.snapshotChanges().pipe(map(changes => {
return changes.map(a => {
const data = a.payload.doc.data() as IntCvSkill;
data.id = a.payload.doc.id;
return data;
});
}));
}
getSkillsGefiltert() {
return this.cvSkillFilter;
}
getSkillsFilterAnwenden() {
return this.cvSkillFilterAnwenden;
}
addItem(skill: IntCvSkill) {
this.cvSkillCollectionFilter.add(skill);
}
filtere(filterElement: string) {
this.filterWert = filterElement;
console.log(this.filterWert);
}
Функция «filtere ()» изменяет значение переменной «filterWert».Это работает нормально, потому что, когда я его консоль.log, я получаю правильное значение, но значение внутри cvCollectionFilter не меняется, и я не знаю, почему.
Вот файл componentont.ts изэлементы, которые являются свойствами для фильтрации:
skillGruppen: IntCvSkill[];
constructor(private skillService: CvServiceService) { }
ngOnInit() {
this.skillService.getSkillsFilterAnwenden().subscribe(cvSkillGruppe => {
this.skillGruppen = cvSkillGruppe;
});
}
filterAnwenden(filterElement: string) {
this.skillService.filtere(filterElement);
}
Вот файл componentont.ts элементов, которые должны быть отфильтрованы:
SKILLS: IntCvSkill[];
constructor(private skillService: CvServiceService) { }
ngOnInit() {
this.skillService.getSkillsGefiltert().subscribe(cvSkill => {
this.SKILLS = cvSkill;
});
}
Вот файл componentont.htmlэлементы, которые являются свойствами для фильтрации:
<div>Filter Gruppen:</div>
<div *ngFor="let skillGruppe of skillGruppen">
<div (click)="filterAnwenden(filter.textContent)" #filter>{{skillGruppe.skillGruppe}}</div>
</div>
Вот файл componentont.ts элементов, которые должны быть отфильтрованы:
<div *ngIf="SKILLS?.length > 0; else noItem">
<div *ngFor="let skill of SKILLS">
<div class="skill">
<mat-accordion>
<mat-expansion-panel>
<mat-expansion-panel-header>
<mat-panel-title>{{skill.skillname}}
</mat-panel-title>
<mat-progress-bar class="progress-bar" [value]="skill.skillwert"></mat-progress-bar>
<mat-panel-description>
</mat-panel-description>
</mat-expansion-panel-header>
<div>{{skill.skillBeschreibung}}</div>
</mat-expansion-panel>
</mat-accordion>
</div>
</div>
</div>
<ng-template #noItem>
<div>Keine Skills!</div>
</ng-template>
Странно, когда я устанавливаюзначение для этого я хочу фильтровать по mySelf в коде, это работает.Как я могу изменить значение переменной filterWert внутри cvSkillCollectionFilter?
Обновление: проблема в том, что в конструкторе я не могу обновить переменную filterWert.Сейчас я ищу решение, как это сделать.