2016-06-23 24 views
0

다음 시나리오에서 Ionic2loading/Toast/Alert을 호출하려고합니다. 내가 이오니아 개발을 처음 접했을 때, 나는 그것을 이해할 수 없다. 나는 그것이 바보 같은 오류라는 것을 알고있다.TypeError : 정의되지 않은 'present'속성을 읽을 수 없습니다.

var dg = document.getElementById('btnregis'); 
    dg.onclick =()=> this.presentLoading(); 


    presentLoading() { 
    console.log("Registered"); 
    let loading = Loading.create({ 
     content: "Please wait...", 
     duration: 3000 
    }); 
    this.navController.present(loading); 
    this.Reg_success(); 
} 


    Reg_success() { 
console.log("registration success"); 
     this.Billerlabelview = false; 
     let toast = Toast.create({ 
      message: "Registering...", 
      duration: 3000 
     }); 
     this.navController.present(toast); 
    } 

reg_Success() 메서드가 호출 받고 있지 않습니다. 비슷한 예외가 발생합니다. 내가 빠진 것이 있습니까?

+0

나머지 코드를 추가해 주시겠습니까? 그렇게하면 생성자의 매개 변수가 무엇인지, 그리고이 문제를 일으킬 수있는 다른 사항을 살펴볼 수 있습니다. – sebaferreras

답변

0

navController는 어디에 사용합니까? 이를 사용하여 db.onclick 메소드를 바인드 할 수 있습니다.

var dg = document.getElementById('btnregis'); 
dg.onclick = this.presentLoading.bind(this); 



    presentLoading() { 
    console.log("Registered"); 
    let loading = Loading.create({ 
     content: "Please wait...", 
     duration: 3000 
    }); 
    this.navController.present(loading); 
} 
+0

업데이트 된 질문을 찾으십시오. –

0

함수에 대한 참조를 전달할 때 this 컨텍스트가 없습니다.

매개 변수로 함수를 전달할 때마다 lambdas (또는 굵은 화살표 함수)를 사용하는 것이 좋습니다. 올바른 클래스/범위의 컨텍스트를 가지고있을뿐만 아니라 더 읽기 쉽고 일관성이 있습니다. https://stackoverflow.com/a/23045200/1961059

+0

업데이트 된 질문을 찾으십시오. –

+0

적어도 예외는 무엇입니까? – rinukkusu

0

첫째, 및 END_LINK하면 관심이 NavController에서 present() 방법을 사용하기 때문에, 당신은 당신의 constructor에 정의되어 있는지 확인 : 람다를 사용하는 경우에

dg.onclick =() => this.presentLoading(); 

정말 좋은 읽기

class MyClass{ 
    constructor(navController: NavController) { 
     // Ionic docs also recommends to add the next line to make it easier to understand http://ionicframework.com/docs/v2/2.0.0-beta.9/api/components/nav/NavController/#present 
     this.navController = navController; 
    }  
} 

귀하의 질문에 대해서는 Ionic docs에서 볼 수 있습니다 present()는 012를 반환합니다.

presentLoading() { 
    console.log("Registered"); 
    let loading = Loading.create({ 
     content: "Please wait...", 
     duration: 3000 
    }); 
    this.navController.present(loading).then(() => { 
     this.Reg_success(); 
    });   
} 

마지막으로, 당신은 또한 당신이 click 이벤트를 처리하고 대신이 일을하는 방법을 변경할 수 있습니다, 그 해결됩니다 때까지 기다려야 할 것이다 있도록 은 다음 Reg_success 메소드를 호출 :

dg.onclick = this.presentLoading.bind(this);

당신은 당신의 button에이 코드를 추가하여 이온/angular2 방향에서 작업을 수행 할 수 있습니다

<button (click)="presentLoading()">Click me!</button>

관련 문제