Angular6ルーターの解決-コンポーネントが呼び出されていません

ArunM

以下は、私がルート上で定義した私の決意です。

@Injectable({
    providedIn: 'root'
})
export class CourseDetailResover implements Resolve<Observable<[Course, (Lesson[])]>>  {

    constructor(private coursesService: CoursesService) { }

    resolve(route: ActivatedRouteSnapshot,
        state: RouterStateSnapshot): Observable<[Course, (Lesson[])]> {
            return this.coursesService.findCourseByUrl(route.params['id'])
            .pipe(
                tap(data => console.log(data)),
                switchMap(
                    course => this.coursesService.findLessonsForCourse(course.id)
                        .pipe(
                             tap(data => console.log(data)),
                            map<Lesson[], [Course, Lesson[]]>(lessons => [course, lessons]),
                            tap(data => console.log(data))
                        )
                )
            );
    }
}

私のルートは

  {
        path: 'course/:id',
        component: CourseDetailComponent,
        resolve: {
            detail:CourseDetailResover
        }
    }

リゾルバーが呼び出されていても、以下のコンポーネントngOnInitが実際に呼び出されることはありません。

export class CourseDetailComponent implements OnInit {

  course$: Observable<Course>;
  lessons$:Observable<Lesson[]>;

  constructor(private route: ActivatedRoute) {}

  ngOnInit(): void {
    console.log('inside here');
    this.course$ = this.route.data.pipe(map(data => data['detail'][0]));

    this.lessons$ = this.route.data.pipe(map(data => data['detail'][1]));
  }
}

ルートでトレースを有効にすると、次のことがわかります。

Router Event: ResolveStart

ただしRouter Event: ResolveEnd、トレースログには存在しません

ここで問題になる可能性はありますか?

mitschmidt

observablesここでRxJSを二重にネストしているようです-意図したものですか?Resolve角度インターフェースを見るとき、あなたはそれを正しく実装していますT、あなたは実際にはObservableそれ自体です:

export interface Resolve<T> {
    resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<T> | Promise<T> | T;
}

したがって、リゾルバクラスは次のようになります。

export class CourseDetailResover implements Resolve<[Course, (Lesson[])]>

あなたngOnInitが決して呼び出されないという事実Observableは、あなたのresolveメソッドによって返されたものが決して終了/完了しないという仮定につながりますリゾルバーがその作業を「完了」してルーティングプロセスを続行するには、Observableが完了する必要があることに注意してください。参考のためにこの問題を見てください:

https://github.com/angular/angular/issues/10556

次のコードが機能します

@Injectable({
    providedIn: 'root'
})
export class CourseDetailResover implements Resolve<Promise<Observable<[Course, (Lesson[])]>>>  {

    constructor(private coursesService: CoursesService) { }

    resolve(route: ActivatedRouteSnapshot,
        state: RouterStateSnapshot): Promise<Observable<[Course, (Lesson[])]>> {
            const routerObservable =   this.coursesService.findCourseByUrl(route.params['id'])
            .pipe(
                switchMap(
                    course => this.coursesService.findLessonsForCourse(course.id)
                        .pipe(
                            map<Lesson[], [Course, Lesson[]]>(lessons => [course, lessons]),
                        )
                )
            );

            return new Promise((resolve,reject) => {
                routerObservable.pipe(
                    first()
                ).subscribe((data) => {
                    console.log(data)
                    resolve(routerObservable)});
            })
    }
}

コンポーネント側

  ngOnInit(): void {
    console.log('inside here');
     const observableD:Observable<[Course, (Lesson[])]> = this.route.snapshot.data["detail"];
    this.course$ = observableD.pipe(
      map(data => data[0])
    );

    this.lessons$ = observableD.pipe(
      map(data => data[1])
    );
  }

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

Next()は、同じコンポーネントを使用してbeforeRouteUpdateで呼び出されていません

分類Dev

同じコンポーネントに異なるデータがロードされている場合、ngOnInitは呼び出されません

分類Dev

React:まだマウントされていないコンポーネントでsetStateを呼び出すことができません

分類Dev

VueRouter:子コンポーネントは呼び出されません

分類Dev

反応コンポーネントをテストするときにJestモックが呼び出されていません

分類Dev

onchangeメソッドから呼び出された後、React関数がコンポーネントを返していません

分類Dev

別のJDialogから呼び出すと、JDialogコンポーネントが表示されません

分類Dev

マウントされていないコンポーネントでsetState(またはforceUpdate)を呼び出せません

分類Dev

警告:React NativeのマウントされていないコンポーネントでsetState(またはforceUpdate)を呼び出すことはできません

分類Dev

componentDidMount:マウントされていないコンポーネントでsetState(またはforceUpdate)を呼び出すことはできません

分類Dev

マウントされていないコンポーネントでsetState(またはforceUpdate)を呼び出すことはできません。React

分類Dev

React警告:マウントされていないコンポーネントでsetState(またはforceUpdate)を呼び出すことはできません

分類Dev

Reactアプリ。まだマウントされていないコンポーネントでsetStateを呼び出すことはできません

分類Dev

componentDidMountの後でも、マウントされていないコンポーネントでsetStateを呼び出すことはできません

分類Dev

React:this.setState()が呼び出された後、コンポーネントのrender()は呼び出されません

分類Dev

Angular6変数がGoogleChrome(Webコンポーネント)で解決されない

分類Dev

コンポーネント名が同じ場合、子コンポーネントは再度呼び出されません

分類Dev

AppRoutingModule関数呼び出しのテンプレートコンパイル中のエラーはデコレータではサポートされていませんが、RouterdataUrlが呼び出されました

分類Dev

ui-routerネストされたルートコントローラーが呼び出されていません

分類Dev

子コンポーネントが親コンポーネント関数を呼び出していません

分類Dev

:component-did-updateが呼び出されても、form-3コンポーネントは何も再レンダリングしません

分類Dev

他のコンポーネントから関数を呼び出すと、ビューが更新されませんAngular + NativeSript(6)

分類Dev

Magentoコントローラーメソッドがルートで呼び出されていません

分類Dev

呼び出しが異なっても、vueコンポーネントの一部が変更されることはありません

分類Dev

子コンポーネントのスローをアンマウントしても、reactjsのマウントされていないコンポーネントでsetstateを呼び出すことはできません

分類Dev

開発ツールでコンポーネントの状態が更新されますが、後でthis.stateを呼び出すと更新されません

分類Dev

Angular 2、routerOnActivateメソッドがOnActivateを実装するコンポーネントに対して呼び出されることはありません

分類Dev

Webコンポーネント:セッターが呼び出されない

分類Dev

関数呼び出しを取り除く方法は、Angular aotコンパイルのデコレータではサポートされていませんか?

Related 関連記事

  1. 1

    Next()は、同じコンポーネントを使用してbeforeRouteUpdateで呼び出されていません

  2. 2

    同じコンポーネントに異なるデータがロードされている場合、ngOnInitは呼び出されません

  3. 3

    React:まだマウントされていないコンポーネントでsetStateを呼び出すことができません

  4. 4

    VueRouter:子コンポーネントは呼び出されません

  5. 5

    反応コンポーネントをテストするときにJestモックが呼び出されていません

  6. 6

    onchangeメソッドから呼び出された後、React関数がコンポーネントを返していません

  7. 7

    別のJDialogから呼び出すと、JDialogコンポーネントが表示されません

  8. 8

    マウントされていないコンポーネントでsetState(またはforceUpdate)を呼び出せません

  9. 9

    警告:React NativeのマウントされていないコンポーネントでsetState(またはforceUpdate)を呼び出すことはできません

  10. 10

    componentDidMount:マウントされていないコンポーネントでsetState(またはforceUpdate)を呼び出すことはできません

  11. 11

    マウントされていないコンポーネントでsetState(またはforceUpdate)を呼び出すことはできません。React

  12. 12

    React警告:マウントされていないコンポーネントでsetState(またはforceUpdate)を呼び出すことはできません

  13. 13

    Reactアプリ。まだマウントされていないコンポーネントでsetStateを呼び出すことはできません

  14. 14

    componentDidMountの後でも、マウントされていないコンポーネントでsetStateを呼び出すことはできません

  15. 15

    React:this.setState()が呼び出された後、コンポーネントのrender()は呼び出されません

  16. 16

    Angular6変数がGoogleChrome(Webコンポーネント)で解決されない

  17. 17

    コンポーネント名が同じ場合、子コンポーネントは再度呼び出されません

  18. 18

    AppRoutingModule関数呼び出しのテンプレートコンパイル中のエラーはデコレータではサポートされていませんが、RouterdataUrlが呼び出されました

  19. 19

    ui-routerネストされたルートコントローラーが呼び出されていません

  20. 20

    子コンポーネントが親コンポーネント関数を呼び出していません

  21. 21

    :component-did-updateが呼び出されても、form-3コンポーネントは何も再レンダリングしません

  22. 22

    他のコンポーネントから関数を呼び出すと、ビューが更新されませんAngular + NativeSript(6)

  23. 23

    Magentoコントローラーメソッドがルートで呼び出されていません

  24. 24

    呼び出しが異なっても、vueコンポーネントの一部が変更されることはありません

  25. 25

    子コンポーネントのスローをアンマウントしても、reactjsのマウントされていないコンポーネントでsetstateを呼び出すことはできません

  26. 26

    開発ツールでコンポーネントの状態が更新されますが、後でthis.stateを呼び出すと更新されません

  27. 27

    Angular 2、routerOnActivateメソッドがOnActivateを実装するコンポーネントに対して呼び出されることはありません

  28. 28

    Webコンポーネント:セッターが呼び出されない

  29. 29

    関数呼び出しを取り除く方法は、Angular aotコンパイルのデコレータではサポートされていませんか?

ホットタグ

アーカイブ