Фильтр данных Angularfire2 с использованием дочернего элемента существует - PullRequest
0 голосов
/ 22 мая 2018

У меня есть такие данные, как this . Когда мне нужно получить данные из списка вопросов, мне нужно проверить, существует ли текущий идентификатор пользователя (зарегистрированный пользователь) в answersStudents . Если тогда существуетэтот вопрос нужно скрыть от пользователя.В противном случае вопрос будет показан в списке.

Вот как я получу вопросы:

getQuizesSeries()
  {
    let ref = this.afDB.list('questions').snapshotChanges()
    .map(changes =>{
      console.log(changes);
      return changes.map(c=> ({key:c.payload.key,...c.payload.val()}));
    });

    return ref;

  }

В моем constructor я назвал это function следующим образом:

  questions:Observable<any[]>;
  quizes:any;

  constructor(public navCtrl: NavController, public afDb:AngularFireDatabase ,public navParams: NavParams,public dataProvider:DataProvider) {
    this.quizes = this.dataProvider.getQuizesSeries();       
  }

а вот мой html, где отображаются данные:

<ion-list *ngFor="let quiz of quizes |async;let i = index;" >
    <ion-item (click)="passkey(quiz.key)">
        <p>{{quiz.name}}</p>
    </ion-item>
</ion-list>

Ответы [ 2 ]

0 голосов
/ 22 мая 2018

Я попытался добавить простой пример с фиктивными данными для решения этой задачи.Вам необходимо использовать оператор filter, чтобы отфильтровать вопросы, на которые уже ответил зарегистрированный пользователь.

В приведенном ниже коде я проверяю, ответил ли уже зарегистрированный пользователь на этот вопрос или нет.Если YES, пропустите этот вопрос, иначе добавьте этот вопрос в список вопросов.

let questions = [
  {id: 1, desc: "desc1"},
  {id: 2, desc: "desc2"},
  {id: 3, desc: "desc3"}
];

let answeredStudents = [
  {id: 1, answered: [1]},
  {id: 2, answered: [1, 2]}
];

let loggedUserId = 1;

let questionsObs = Rx.Observable.from(questions);

function hasNotAnswered(id, question) {
  let user;
  answeredStudents.forEach(student => {
    if (student.id === id) {
      user = student;
    }
  });
  return !(user.answered.indexOf(question.id) > -1);
}

questionsObs.filter(question => hasNotAnswered(loggedUserId, question))
  .map(question => questionList.push(question));
0 голосов
/ 22 мая 2018

Вам нужно будет получить UID текущего студента, вошедшего в систему.

Например,

stduentID = //the id of the logged in user here

Затем, когда вы создаете вопросы в списке ионов, вы будетеиметь ngIf, проверяющий uid answerStudents с пользовательским идентификатором loggedIn

<ion-list *ngFor="let quiz of quizes |async;let i = index;" >
    <ion-item (click)="passkey(quiz.key)" *ngIf="your logic here">
        <p>{{quiz.name}}</p>
    </ion-item>
</ion-list>
...