2017-11-02 13 views
2

私はIonic 3のプロジェクトで作業しています。異なるメニューがあります。メニューを選択すると、イベントを公開して、ページ上の配列の値を変更するだけです。すべて正常に動作していますが、ページのデータが変わると、スクロールバーは前の位置にとどまります。私はメニューから項目を選択するたびにページをスクロールして頂きたい。このためIonic 3 - ランタイムエラーNULLのプロパティ 'scrollToTop'を読み取ることができません

私は、イベントがメニュー項目を選択する上で公開されているthis-

を使用しています。コードはapp.component.ts

onSelectCourse(slug){ 
    const loading = this.loadingCtrl.create({ 
     content: 'Loading Articles' 
    }); 
    loading.present(); 
    if(slug == 'all'){ 
     this.postsProvider.listPosts(1) 
     .subscribe(data => { 
      this.events.publish('posts:listed', data); 
      loading.dismiss(); 
      this.menuCtrl.close(); 
     }); 
    } 
    else{ 
     this.postsProvider.listPostsByCategory(slug, 1) 
     .subscribe(data => { 
      this.events.publish('posts:listed', data); 
      loading.dismiss(); 
      this.menuCtrl.close(); 
     }); 
    } 
} 

ホームページでのイベントをサブスクライブ(home.ts)でwrittentされる -

export class HomePage { 
    posts: any = []; 
    pages: number; 
    page: number; 
    category: string; 
    @ViewChild(Content) content: Content; 
    constructor(
       private events: Events, 
       private postsProvider: PostsProvider, 
       private changeRef:ChangeDetectorRef) { 
     this.events.subscribe('posts:listed', (data) => { 
      this.posts = data.posts; 
      this.pages = data.pages; 
      this.page = 1; 
      this.category = data.category; 
      this.changeRef && this.changeRef.detectChanges(); 
      this.content.scrollToTop(); 
     }); 
    } 
} 

しかし、項目を選択する上で、私はこのエラー

を取得しています

enter image description here

+0

「あなたはメニューからアイテムを選択しました」の購読されたイベントのリストデータが変更されていますか? –

+0

はい、リストはページ内で更新されていますが、スクロールバーは同じ位置に残ります.. –

+0

いつイベントが公開されますか? –

答えて

1

domがまだロードされていないので、あなたはconstructor()の内側(すなわちthis.content.scrollToTop())それにアクセスすることはできません。

ここではionViewDidEnter()ライフサイクルイベントを使用できます。

ionViewDidEnter(){ 
events.subscribe('posts:listed', (data) => { 
      ---- 
      ---- 
      this.content.scrollToTop(); 
     }); 
} 
+0

同じ、 –

+0

'this.content'の値は何ですか? – Sampath

+0

console.log(this.content);コンテンツ{_config:Config、_elementRef:ElementRef、_renderer:RendererAdapter、_componentName: "content"、_mode: "ios"、...} の色 : (...) –

関連する問題