3

似たような質問がありましたが、これらの質問には、私が扱っているものとは少し異なるデータ構造がありました。これは私のデータ構造であるAngularFire 2に参加する

:私は見てきました

{ 
    "samples": { 
    "24084": { 
     "addInfo": "TEST", 
     "datePrinted": "8/11/2017 9:42:57 AM", 
     "equipment": "GR028", 
     "hmisNumber": "100E", 
     "lotNumber": "GR0030C659-JM", 
     "productionNumber": "PN0034781", 
     "userName": "MCorbett" 
    }, 
    "24342": { 
     "addInfo": "test", 
     "datePrinted": "8/15/2017 11:51:55 AM", 
     "equipment": "GR025", 
     "hmisNumber": "100", 
     "lotNumber": "BR0010P835", 
     "productionNumber": "PN0035616", 
     "userName": "MCorbett" 
    } 
    }, 
    "scans": { 
    "-Krlb3tv3oFPtYZp2ErX": { 
     "inTime": 1502997139131, 
     "sampleId": "24342" 
    }, 
    "-KrlbdbCT0us6xE9POm3": { 
     "inTime": 1502997289573, 
     "outTime": 1502997292524, 
     "sampleId": "24342" 
    }, 
    "-Krlc3vsjiQ9czWYGvA9": { 
     "inTime": 1502997401784, 
     "outTime": 1502997404864, 
     "sampleId": "24084" 
    } 
    } 
} 

あなたが見ることができるように、スキャンにサンプルを持っています1対多数の関係。私がしなければならないのは、データをスキャンするために結合されたサンプルデータが入ったテーブルにデータが入っていることです。それはこのように見て必要があります:私はOUTTimeはが定義されていないすべてのスキャンをつかむ、そしてそれは、サンプルデータを対応だし、それに参加する必要があり

"24342": { 
    "addInfo": "test", 
    "datePrinted": "8/15/2017 11:51:55 AM", 
    "equipment": "GR025", 
    "hmisNumber": "100", 
    "lotNumber": "BR0010P835", 
    "productionNumber": "PN0035616", 
    "userName": "MCorbett", 
    "inTime": 1502996197213 
} 

// Get samples that have a scan where inTime is populated but outTime is not 
    getOpenSamples() { 
     console.log('getopensmaples stareted') 
     let scanWithSampleList = this.scanSvc.getScansList({ 
       orderBy: 'outTime', 
       startAt: '' 
      }) 
      .switchMap(scans => { 
       let sampleObservables = scans.map(scan => this.getSample(scan.sampleId)); 
       console.log("insisde"); 
       return sampleObservables.length === 0 ? 
        Observable.of(scans) : 
        Observable.combineLatest(sampleObservables, (samples) => { 
         scans.forEach((scan, index) => { 
          scan.productionNumber = samples[index].productionNumer; 
          scan.lotNumbner = samples[index].lotNumber; 
         }); 
         return scans; 
        }); 
      }); 
    } 

これは私に、このエラーを与える:

ERROR in C:/Users/corbetmw/workspace/angular/sample-time-tracking/src/app/samples/shared/sample.service.ts (82,54): Propert y 'productionNumer' does not exist on type '{}'.

私はここで間違って何をしているのですか?ここで私はこれまで試してみましたものですかこれはシンプルなもののようですが、私はそれに多くの問題を抱えています。データ構造を変更する必要がありますか?未定義のoutTimeでスキャンを取得し、サンプルIDを渡すことができる親を持つテーブルに貼り付けるか、その逆のコンポーネントを作成する必要がありますか?

+0

ありがとうフランク!私は本当に正しくフォーマットされたものを得るのにいくつかの問題を抱えていました。 –

答えて

0

タイプScan<>の観測可能なものを返す解決策を見つけることができました。その中にScanという単一のものがあります。

私はこの機能があります。そして、

getOpenScans() { 
 
     const scansList = this.db.list('/scans', ref => ref.orderByChild('outTime').endAt(null)); 
 
     return scansList.snapshotChanges().map(arr => { 
 
      return arr.map(snap => Object.assign(snap.payload.val(), { 
 
       $key: snap.key 
 
      })) 
 
     }) 
 
    }

を、私はこの男を持っている:私は今ティを実装しようとしています

getOpenSamples() { 
 
    let openScans = this.scanSvc.getOpenScans(); 
 

 
    let fullSamples = openScans.map(scans => { 
 
     for (let scan of scans) { 
 
     scan.sample = this.getSample(scan.sampleId); 
 
     } 
 
     return scans; 
 
    }); 
 
    
 
    //fullSamples.subscribe(samples => console.log(samples)); 
 
    return fullSamples; 
 
    }

マテリアル2のMatTableを使用したソリューションです。

関連する問題