2016-09-07 3 views
0

firebase에서 중첩 된 데이터를 검색하고 유형을 안전하게 유지하려고합니다. 나는 이것을 보았습니다 : https://github.com/aaronksaunders/afwithngcli/blob/master/src/app/afwithngcli.component.ts 그러나 인터페이스를 사용하지 않습니다. (이 샘플 간체)3 단계 중첩 된 데이터를 검색하고 각도 2와 각도 1200의 인터페이스를 사용하여 안전하게 유지하십시오.

내 인터페이스 :

export interface IStudy { 
    $key?: string; 
    description: string; 
    subjects: ISubject[]; 
} 

export interface ISubject { 
    $key?: string; 
    description: string; 
    someOtherData: string; 
    classes: IClass[]; 
} 

export interface IClass { 
    $key?: string; 
    description: string; 
    someOtherData: string; 
} 

내 서비스 :

@Injectable() 
export class MyService { 
    private myStudies$: FirebaseListObservable<IStudy[]>; 

    constructor(af: AngularFire, auth: AuthService) { 
    this.myStudies$ = af.database.list(`/studies/${auth.id}`).map((studies: IStudy[]) => { 
     return studies.map(study => { 
     study.subjects = af.database.list(`/subjects/${study.$key}`).map((subjects: Subject[]) => { 
      return subjects.map(subject => { 
      subject.classes = af.database.list(`/classes/${subject.$key}`); 
      return subject; 
      }) 
     }); 
     return study; 
     }) 
    }) 
    } 

    getMyStudies(): Observable<IStudy[]> { 
    return this.myStudies$; 
    } 
} 

내가 그래서, 관찰 가능한 모든 주제와 클래스를 포함한 모든 공부를 얻을 수있다 수행하려고 하나의 구성 요소에서 모든 레벨을 표시하고 편집 할 수 있습니다.

Type 'Observable<IStudy[]>' is not assignable to type 'FirebaseListObservable<IStudy[]>'. 
Property '_ref' is missing in type 'Observable<IStudy[]>'. 

Type 'Observable<ISubject[]>' is not assignable to type 'ISubject[]'. 
Property 'length' is missing in type 'Observable<ISubject[]>'. 

Type 'FirebaseListObservable<any[]>' is not assignable to type 'IClass[]'. 
Property 'length' is missing in type 'FirebaseListObservable<any[]>'. 

문제는 생성자에 오류가 this.myStudies의 $, study.subjects 및 subject.classes에 할당 오류가 있음을 강조 :

나는 오류가 말을 얻을.

내가 뭘 잘못하고 있니?

답변

0

FirebaseListObservable은 Observable과 다른 유형입니다. 변경 시도 :

getMyStudies(): Observable<IStudy[]> { 
    return this.myStudies$; 
    } 

편집

getMyStudies(): FirebaseListObservable <IStudy[]> { 
    return this.myStudies$; 
} 

에 : 나는 당신이 관찰 가능한 위해 같은 깊은 중첩 호출을 방지해야한다고 생각하지만, 두 번째 눈에 당신이 여기에 버그가 있습니다

당신이 FirebaseListObservable를 할당됩니다 subject.classes.

+0

문제는 생성자에 있습니다. 내 편집을 참조하십시오. –

+0

대답을 편집하여 도움이되는지 확인하십시오. 새 오류 붙여 넣기가 나타나면 – MatWaligora

+0

같은 오류가 발생합니다. 당신은 깊은 중첩을 피하라고 제안하지만 어떻게 해결할 것이라고 제안합니까? 내 질문에 링크에서 볼 수 있듯이 다른 사람들이 중첩을하고 있으므로 가능한 경우에만 작동하도록 할 수 없습니다. –

관련 문제