2017-01-30 2 views
3

PopoverController를 여는 버튼이있는 페이지 구성 요소가 있습니다. Ionic Docs에 따르면, popovers는 내용에 또 다른 특정 구성 요소가 필요합니다.이온 2 : Popover 구성 요소에서 부모 페이지 함수를 호출하는 방법

메인 페이지에는 popover 구성 요소에서 호출해야하는 기능이 있지만 "부모"메소드에 액세스하는 방법을 찾지 못했습니다. 나는 @ViewChild으로 시도했지만 그 아이는 undefined입니다.

import { Component, ViewChild } from '@angular/core'; 
import { Content, NavController, NavParams, Platform, PopoverController, ViewController } from 'ionic-angular'; 

// Parent page: 
@Component({ 
    selector: 'page-favorites', 
    templateUrl: 'favorites.html' 
}) 
export class FavoritesPage { 
    constructor(public popoverCtrl: PopoverController) { 
    } 

    openOptions(ev?: Event) { 
     let popover = this.popoverCtrl.create(FavoritesPopover); 
     popover.present({ ev: ev }); 
    } 

    showConfirm() { 
     // This is the function I need to call from FavoritesPopover 
    } 
} 

// Popover content: 
@Component({ 
    template: ` 
    <ion-list> 
     <button ion-item (click)="showConfirm()">Show confirm</button> 
    </ion-list>` 
}) 
export class FavoritesPopover { 
    @ViewChild(FavoritesPage) favoritesPage: FavoritesPage; 

    showConfirm() { 
     this.favoritesPage.showConfirm(); // It doesn't work, favoritesPage is undefined 
    } 
} 

내가 알기로는 이오닉 2와 각도로 작업하기 시작 했으므로 도움이 될 것입니다.

+0

'showConfirm()'에서 무엇을하고 싶습니까? –

답변

8
당신은 create 방법으로 두 번째 인수로 객체를 전달하여 팝 오버 데이터 (및 기능)을 통과 할 수

: 당신이 당신의 팝 오버보기로 NavParams를 주입해야한다, 그런

openOptions(ev?: Event) { 
    let popover = this.popoverCtrl.create(FavoritesPopover, { 
     showConfirm: function() { 
      alert('yay'); 
     } 
    }); 
    popover.present({ ev: ev }); 
} 

get 기능 당신은 통과했습니다 :

import {NavParams} from 'ionic-angular'; 

export class FavoritesPopover { 
    constructor(public params: NavParams) {} 

    showConfirm() { 
     this.params.get('showConfirm')(); 
    } 
} 
+0

@Schaus 감사합니다! 필자는 popover의 create 메소드를 사용하여 함수뿐만 아니라 사용되는 모든 객체에 대한 참조를 전달했으며 이제는 잘 작동합니다. –

+0

좋습니다,'alert ('yay');가있는 예제가 작동합니다. 그러나 클래스의 기존 fuction을 사용하려고하면 정의되지 않습니다. 외부 함수를 호출 할 수없는 이유는 무엇입니까? 예 : this.someFunction()' – alex351

+0

내가 보는 방법은 클래스의 기존 함수를 사용하지 않고'this.popoverCtr.create ... '내에 새로운 함수를 작성하는 것입니다. 나 맞아? – alex351

관련 문제