Угловой материал 6 - мат-стол Данные из сервиса

Я хочу интегрировать данные из службы в угловую таблицу материалов.


Все примеры, которые я мог видеть, относятся к жестким данным в файле ts, но не относятся к службе.

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

Кто-нибудь знает решение?


Component.ts

import { Component, OnDestroy, OnInit, ViewChild} from '@angular/core';
import { PatientsService } from '../services/patients.service';
import { Patient } from '../models/patient.model';
import { Subscription } from 'rxjs/Subscription';
import { Observable } from 'rxjs/observable';
import { Router } from '@angular/router';
import { MatPaginator, MatTableDataSource } from '@angular/material';
import { DataSource } from '@angular/cdk/collections';

@Component({
selector: 'app-patient-list',
templateUrl: './patient-list.component.html',
styleUrls: ['./patient-list.component.scss']
})

export class PatientListComponent implements OnInit {

displayedColumns = ['prenom', 'nom', 'sexe', 'daten'];
dataSource = new MatTableDataSource<Patient>();

patients: Patient[];
patientsSubscription: Subscription;

constructor(private patientsService: PatientsService, private router: Router) 
{}

ngOnInit() {

 this.patientsService.getPatients().subscribe(
  data => {
    this.dataSource.data = data;
  }
);

 this.patientsService.emitPatients();
 }

 onNewPatient() {
 this.router.navigate(['/patients', 'new']);
 }

 onDeletePatient(patient: Patient) {
 this.patientsService.removePatient(patient);
 }

 onViewPatient(id: number) {
 this.router.navigate(['/patients', 'view', id]);
 }

 ngOnDestroy() {
 this.patientsSubscription.unsubscribe();
  }
 }

 export interface Element {
 prenom: string;
 nom : string;
 sexe: string;
 daten: new Date ();
 }

Component.ts

    <div >
    <table mat-table [dataSource] = "dataSource" class = "mat-elevation-z8">


   <ng-container matColumnDef = "prenom">
   <th mat-header-cell *matHeaderCellDef> Prénom </th>
   <td mat-cell *matCellDef = "let element"> {{element.prenom}} </td>
   </ng-container>


   <ng-container matColumnDef = "nom">
   <th mat-header-cell *matHeaderCellDef> Nom de naissance </th>
   <td mat-cell *matCellDef = "let element">  {{element.nom}}</td>
   </ng-container>


   <ng-container matColumnDef = "daten">
   <th mat-header-cell *matHeaderCellDef> Date de naissance </th>
   <td mat-cell *matCellDef = "let element">  {{element.daten}} </td>
   </ng-container>


   <ng-container matColumnDef = "sexe">
   <th mat-header-cell *matHeaderCellDef> Sexe </th>
   <td mat-cell *matCellDef = "let element">  {{element.sexe}} </td>
   </ng-container>

   <tr mat-header-row *matHeaderRowDef = "displayedColumns"></tr>
   <tr mat-row *matRowDef = "let row; columns: displayedColumns;"></tr>
   </table>
   </div>

Модель

    export class Patient 
    {
    photo: string;
    constructor(public nom: string, public prenom: string, public sexe: 
    string, public daten = new Date ()) {}
    }

Услуга

    import { Injectable } from '@angular/core';
    import { Subject } from 'rxjs/Subject';
    import { Patient } from '../models/patient.model';
    import * as firebase from 'firebase';
    import DataSnapshot = firebase.database.DataSnapshot;
    import {Observable} from "rxjs";

    @Injectable()
    export class PatientsService {

    patients: Patient[] = [];
    patientsSubject = new Subject<Patient[]>();

    emitPatients() {
    this.patientsSubject.next(this.patients);
    }

         savePatients() {
         firebase.database().ref('/patients').set(this.patients);
         }

         getPatients() {
         firebase.database().ref('/patients')
         .on('value', (data: DataSnapshot) => {
         this.patients = data.val() ? data.val() : [];
         this.emitPatients();
         }
         );
         }

        getSinglePatient(id: number) {
        enter code herereturn new Promise(
          (resolve, reject) => {
            firebase.database().ref('/patients/' + id).once('value').then(
             (data: DataSnapshot) => {
              resolve(data.val());
            }, (error) => {
              reject(error);
            }
          );
         }
     );
     }

Я не вижу других сообщений по этой проблеме.

Наблюдаемое не может подписаться на тип void

Abr001am 01.06.2018 13:48
это отлично работает для меня, должно быть что-то с вашим подключением к firebase, перепроверьте.
Abr001am 01.06.2018 14:29

Проверь это - devglan.com/angular/angular-6-example

Dhiraj Ray 01.06.2018 14:36

мое соединение с Firebase в порядке, потому что я могу отображать своих пациентов в карточках ... Я думаю, что это код для таблицы материалов. Спасибо, Дхирадж Рэй, я пойду посмотреть

user9805953 01.06.2018 14:48

О, очень красивая Abr001am, как я могу использовать ваше решение в своем приложении?

user9805953 01.06.2018 14:54

Я пробую это в своей службе, но «не могу найти имя»: getPatients (): Observable <Patient []> {firebase.database (). Ref ('/ sizes') .on ('value', (data: DataSnapshot) => {this.patients = data.val ()? data.val (): []; this.emitPatients ();}); возвращение (this.patients); }

user9805953 01.06.2018 15:08

Я ЛЮБЛЮ UUU aBR 011 AM !!!!!!!!!!!!!

user9805953 01.06.2018 16:30

очень странно, что пациенты выглядят справедливо, когда я их создаю ...

user9805953 01.06.2018 16:41

Может, одна инициализация?

user9805953 01.06.2018 17:14

@ user9805953, в чем именно проблема, возможно, я смогу помочь

Abr001am 01.06.2018 20:21
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Angular и React для вашего проекта веб-разработки?
Angular и React для вашего проекта веб-разработки?
Когда дело доходит до веб-разработки, выбор правильного front-end фреймворка имеет решающее значение. Angular и React - два самых популярных...
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Мы провели Twitter Space, обсудив несколько проблем, связанных с последними дополнениями в Angular. Также прошла Angular Tiny Conf с 25 докладами.
Угловой продивер
Угловой продивер
Оригинал этой статьи на турецком языке. ChatGPT используется только для перевода на английский язык.
Мое недавнее углубление в Angular
Мое недавнее углубление в Angular
Недавно я провел некоторое время, изучая фреймворк Angular, и я хотел поделиться своим опытом со всеми вами. Как человек, который любит глубоко...
Освоение Observables и Subjects в Rxjs:
Освоение Observables и Subjects в Rxjs:
Давайте начнем с основ и постепенно перейдем к более продвинутым концепциям в RxJS в Angular
1
10
4 560
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

В моем распоряжении:

   getPatients(): Observable<Patient[]> {

   firebase.database().ref('/patients')
   .on('value', (data: DataSnapshot) => { this.patients = (data&&data.val()) 
   ? data.val() : this.patients} );
   return of(this.patients);
   }

И в моем компоненте:

 ngOnInit() { 

 this.patientsService.emitPatients();
 this.patientsSubscription = 
 this.patientsService.patientsSubject.subscribe((patients: Patient[]) => 
 {this.patients = patients;});
 this.patientsService.getPatients().subscribe(data => 
 {console.info(this.patientsService.patients[0]); this.dataSource.data = 
 data;});

Другие вопросы по теме