2017-08-03 54 views
0

console.log(this.slides.length());打印Cannot read property 'length' of undefined.setTimeout爲100時,打印出來。this.slides.length()無法讀取未定義的屬性「長度」

是否有任何方法來識別從父組件完全加載的子組件?

<ion-content padding class="ttct-app-content"> 
    <ion-slides> 
     <ion-slide> 
     <h1>Slide 1</h1> 
     </ion-slide> 
     <ion-slide> 
     <h1>Slide 2</h1> 
     </ion-slide> 
     <ion-slide> 
     <h1>Slide 3</h1> 
     </ion-slide> 
    </ion-slides> 
</ion-content> 
import { Component, ViewChild } from '@angular/core'; 
import { NavController, Slides } from 'ionic-angular'; 

@Component({ 
    selector: 'page-compose', 
    templateUrl: 'compose.html', 
}) 
export class Compose { 
    @ViewChild(Slides) slides: Slides; 

    constructor(public navCtrl: NavController) { 
    } 

    ngAfterViewInit(){ 
    console.log(this.slides.length()); //Cannot read property 'length' of undefined 
    //works 
    /* 
    setTimeout(()=>{  
     console.log(this.slides.length()); 
    },100); 
    */ 

    } 

} 
+0

您是否嘗試過其他的鉤子? – BogdanC

+0

@BogdanC:是的,我嘗試了這篇文章中的所有鉤子 https://angular.io/guide/lifecycle-hooks#!#spy –

+0

這是離子-2中的一個bug嗎? –

回答

0

嘗試拋出該控制檯日誌中:

ionViewDidLoad() { 

} 

而是然後ngAfterViewInit()。

+0

已經嘗試過,沒有用 –

0

看起來像是發生這種情況,因爲<ion-slide></ion-slide>孩子沒有在頁面鉤子上初始化。這就是爲什麼當你把setTimeout()作品,因爲直到那時他們得到初始化,並添加到父母<ion-slides>。 掛鉤後,你可以點擊按鈕來閱讀length()屬性。 你可以在here找到解決辦法。

+0

試過但沒有工作 –

0

試試這個(你不需要輸入任何東西):

ionViewDidEnter() { 
    console.log(this.slides.length()); 
} 

也試圖與滑塊使用ngFor加載和工作就像一個魅力

相關問題