2017-08-03 145 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加载和工作就像一个魅力

相关问题