1

これが私がやろうとしていることです。

  • Ionic2 ポップオーバー メニューにグループ ラジオ ボタンを配置します。
  • オプションは、コンテンツがどの JSON ファイルをロードするかを実際に制御しています。
  • ユーザーがオプションを選択し、ポップオーバーを閉じると、それに応じてページ内のコンテンツが更新されます。

Ionic2 Popover からその親コン​​ポーネントに値を渡す方法がわかりません。私が正しく理解していれば、Ionic2 の Popover は子コンポーネントです。[(ngModel)]ただし、値を渡す方法がわかりません。

私はそれがここで乱雑に見えることを知っています.PopOverからページに値を渡す方法の簡単な例を作るのに十分親切な人だけがいるなら...

だから...これはすべて1つのファイルにあります:

import {Component, Injectable, Input, Output, EventEmitter} from '@angular/core';
import {ViewController, NavController, Popover, Content, Events, NavParams} from 'ionic-angular';
import {CardService} from '../../providers/card-service/card-service';
import {LangService} from '../../providers/lang-service/lang-service';
import {GlobalService} from '../../providers/global-service';   

ポップオーバー コンポーネント:

@Component({template: `
    <ion-list  radio-group [(ngModel)]="selected"  (ionChange)="loadc(selected)"> 

        <ion-item  *ngFor="let chapter of menuArray">
            <ion-label>{{chapter.ctitle}}</ion-label>
<ion-radio value="{{chapter.cchap}}" ></ion-radio>
        </ion-item>
    </ion-list>

        `,
    providers: [CardService, LangService, GlobalService],
directives: [LangService]
})

@Injectable()
export class ChapterService{
private chpselected : any;
private menuArray: any;
    constructor(
    private viewCtrl: ViewController,
    private navController: NavController,
    public cardService: CardService,
    public langService: LangService,
    public globalService: GlobalService

    ) {
        this.menuArray = [
    {
                id: 0,
                cchap: '01',
                ctitle: 'One',
        },
    {
                id: 1,
                cchap: '02',
                ctitle: 'Two',
        },
    {
                id: 2,
                cchap: '03',
                ctitle: 'Three',
        },
];
        ///
 this.chpselected = this.menuArray[0]; 

        ///
    };

  close() {
    this.viewCtrl.dismiss();
  }

///-------------------------------
   Here I triggers an even when clicking the radio buttons in the popover. I want to call the loadCards() function in the HomePage class below so it returns what is selected and load the correct JSON in the DOM. However I do not how to pass this loadc() value to loadCards().
///-------------------------------

    loadc(x){
    console.log(x);
        this.globalService.nowchap = x;
    };


};

ここの別のクラス、ページ:

@Component({
  templateUrl: 'build/pages/home/home.html',
    providers: [CardService, LangService, ChapterService, HomePage, GlobalService],
directives: [LangService]
})

@Injectable()
export class HomePage {
///  
public cards;
public viewmode : any;
    constructor(
    private navController: NavController,
    public cardService: CardService,
    public langService: LangService,
    public globalService: GlobalService
    //public chapterService: ChapterService
    ){



    this.viewmode ="read";
        this.loadCards();
    };

    /* POPOVER*/
    presentPopover(myEvent) {
    let popover = Popover.create(ChapterService);
    this.navController.present(popover, {
      ev: myEvent
    });
  }

/* Contents are loading here */
  public loadCards(x){
    console.log("this chp is "+x);
    this.cardService.load(x)
    .then(data => {
      this.cards = data;
    });

  }

/* LOAD CARDS ENDED*/    
///
}
4

2 に答える 2

1

これが私がやろうとしていることです。

Ionic2 ポップオーバー メニューにグループ ラジオ ボタンを配置します。

オプションは、コンテンツがどの JSON ファイルをロードするかを実際に制御しています。

ユーザーがオプションを選択し、ポップオーバーを閉じると、それに応じてページ内のコンテンツが更新されます。

共有サービスを使用してポップオーバー ページとHomePage. このworkin plunkerを見てください。

を使用しているのを見たglobalServiceので、次のように機能させるために小さな変更を提案します。

import {Injectable} from '@angular/core';
import {Platform} from 'ionic-angular/index';
import {Observable} from 'rxjs/Observable';

@Injectable()
export class GlobalService { 

  // Your properties...

  public getChapterObserver: any;
  public getChapter: any;

  constructor(...){
    // Your code...

    // I'm adding an observer so the HomePage can subscribe to it
    this.getChapterObserver = null;
    this.getChapter = Observable.create(observer => {
        this.getChapterObserver = observer;
    });

  }

  // Method executed when selecting a radio from the popover
  public selectChapter(chapter : any) {
    this.getChapterObserver.next(chapter);
  }

}

次に、あなたのPopoverPage

public loadc(x) {
    // You can call your globalService like this
    //this.globalService.selectChapter(this.menuArray[this.selected]);  

    // O by simply doing
    this.globalService.selectChapter(x);

    // Close the popover
    this.close();
}

これで、selectChapterが変更されたことをサービスに伝えています。そして最後に、あなたのHomePage

constructor(private nav: NavController, private globalService: GlobalService) {

  // We subscribe to the selectChapter event
  this.globalService.getChapter.subscribe((selectedChapter) => {
      this.selectedChapter = selectedChapter;
    });
}

これで、 をサブスクライブしHomePageているGlobalServiceので、章が変わったときに注目され、思い通りに処理できます。

于 2016-07-20T22:45:31.700 に答える