получить документ по идентификатору из коллекции firestore на angular

У меня есть набор действий, в котором есть несколько документов. Я хочу получить определенный документ нажатием кнопки.

Коллекция: действия

Идентификатор документа: автоматический идентификатор

Поля: идентификатор активности, заблокировано, раздел, maxPlayers, имя.

здесь я получаю всю коллекцию как

this.activities = afs.collection('activities', x => x.orderBy('section', 
'asc')).valueChanges();

И я показываю эти коллекции в таблице как;

<tr *ngFor="let activity of activities | async  | paginate: { itemsPerPage: 10, currentPage: p }; let i =index">
    <td>
        {{activity.section}}
    </td>
    <td >
        {{activity.name}}
    </td>
    <td>
        {{activity.maxPlayers}}
    </td>
    <td>
        {{activity.locked}}
    </td>
    <td>
        <button type="button" class="btn btn-success" 
            (click)="onEdit(activity.id);  secondModal.show() "><i 
            class="fa fa-pencil"></i>
                       Edit
        </button>
</td>

Я передал аргумент id функции OnEdit (). В функции OnEdit я хочу получить выборочный документ по идентификатору. И покажите эти поля документа в модели как:

<div *ngFor="let activity of activities | async >
    {{activity.section}}        
    {{activity.name}}                    
    {{activity.maxPlayers}}                    
    {{activity.locked}}

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


person fahad navaid khan    schedule 01.04.2018    source источник
comment
Какое содержание функций onEdit и secondModal.show () содержится в вашем коде?   -  person mohamedvall    schedule 01.04.2018
comment
В функции onEdit (): this.afs.doc (activity / + actId) .valueChanges (); где actId - это идентификатор документа, который я передал в методе onClick. А secondModal.show () вызывает модальное окно для отображения полей этих документов. Но в моем модальном окне отображаются все документы коллекции.   -  person fahad navaid khan    schedule 01.04.2018
comment
Смотрите мой ответ, надеюсь, это поможет.   -  person mohamedvall    schedule 01.04.2018


Ответы (1)


Изменить: в вашем activities.component.html файле:

  <td>
    <button type="button" class="btn btn-success" 
      (click)="onEdit(activity);  secondModal.show()"><i 
      class="fa fa-pencil"></i>
        Edit
     </button>
  </td>

и в activities.component.ts файле:

onEdit(activity){ 
  this.afs.doc("activities/"+activity.id).valueChanges();
  this.activity = activity;
  ..... your code
}

Вы должны объявить переменную activity в вашем activities.component.ts файле так же, как вы это делаете с переменной activities, и вы можете использовать ее в своем модальном шаблоне вместо действий, не требующих директивы *ngFor.

person mohamedvall    schedule 01.04.2018
comment
Как я могу получить поля без использования * ngFor? Он не может идентифицировать мои поля, он показывает мне ошибку. И в первом Как мне получить документ? Извините, я новичок в angular, пожалуйста, не могли бы вы более подробно описать свое решение. Спасибо за вашу помощь. - person fahad navaid khan; 02.04.2018
comment
У меня есть файл activity.component.html, в котором есть таблица, в которой показаны все действия из коллекции. И в этом файле также есть шаблон модели, в котором я хочу получить выборочный документ, который пользователь хочет увидеть. - person fahad navaid khan; 02.04.2018
comment
Я обновляю свой ответ для вас, возможно, вам нужно добавить функцию secondModal.show () в функцию onEdit после this.activity = activity; . - person mohamedvall; 03.04.2018
comment
Сделано это, но возникает ошибка secondModal не может получить поля. В модальном режиме я получаю свои значения вроде этого {{activity.locked}}. - person fahad navaid khan; 07.04.2018
comment
Может быть, я вас не понял, но теперь мне удается получить конкретный документ. В методе onEdit я делаю: ** this.actDoc = this.afs.doc ('activity /' + actId); this.activity = this.actDoc.valueChanges (); **, а затем в модальном режиме я получаю их как {{(activity | async) ?. locked}} Спасибо за вашу помощь, человек очень признателен :) - person fahad navaid khan; 07.04.2018