Ionic2のページからside-menu
に日付を「転送」する方法。つまり、次のようにapp.page.html
を使用します。
<ion-menu [content]="content">
<ion-content class="menu-left">
<!-- User profile -->
<div text-center padding-top padding-bottom class="primary-bg menu-left">
<a menuClose>
<h4 light>{{userName}}</h4>
</a>
</div>
<ion-list class="list-full-border">
<button ion-item menuClose *ngFor="let page of pages" (click)="openPage(page)">
<ion-icon item-left name="{{ page.icon }}"></ion-icon>
{{ page.title }}
<ion-badge color="danger" item-right *ngIf="page.count">{{ page.count }}</ion-badge>
</button>
</ion-list>
</ion-content>
</ion-menu>
<ion-nav [root]="rootPage" #content swipeBackEnabled="false"></ion-nav>
facebookLogin.page
から取得したデータに基づいて、ページ内のアクションでuserName
値を更新する方法は?
facebookLogin.page.ts
:
...
fbLogin() {
Facebook.login(["public_profile", "email"])
.then((resp: FacebookLoginResponse) => {
if (resp.status === "connected") {
Facebook.api("/me", ["public_profile", "email"])
.then(res => {
this.userName = res.name
this.login({name: this.userName})
})
...
);
}
login(params) {
this.nav.setRoot(HomePage, params);
}
...
(つまり、Facebookでログインした後に取得したuserName
をion-sideMenu
のapp.html
にインポートするにはどうすればよいですかEventEmmiter、service/observe app.htmlのイオンメニューの変更について...他の方法?)
イベントをチェックしてください docs
これらを使用すると、任意のページからアクションを「公開」し、別のページでサブスクライブして値を取得できます。あなたのシナリオは少しこのようになります。
インポート(_Facebooklogin.component
_と_app.component
_の両方)
_import { Events } from 'ionic-angular';
_およびコンストラクター内constructor(public events: Events)
次に、userName
を変更するたびに(つまり、Facebookログインのハンドラーで)、次のような値を公開します。
_fbLogin() {
Facebook.login(["public_profile", "email"])
.then((resp: FacebookLoginResponse) => {
if (resp.status === "connected") {
Facebook.api("/me", ["public_profile", "email"])
.then(res => {
this.userName = res.name
// publish the username change to the events
this.events.publish('username:changed', this.userName);
this.login({name: this.userName})
})
//...
);
}
_
そして、あなたの_app.component
_で行われている公開を購読します
_userName: string;
constructor(events: Events) {
this.userName = "not logged in";
events.subscribe('username:changed', username => {
if(username !== undefined && username !== ""){
this.userName = username;
}
}) //...
}
_
EventEmitter
を使用_import { EventEmitter } from '@angular/core';
public userChanged = new EventEmitter();
fbLogin() {
Facebook.login(["public_profile", "email"])
.then((resp: FacebookLoginResponse) => {
if (resp.status === "connected") {
Facebook.api("/me", ["public_profile", "email"])
.then(res => {
this.userName = res.name
// publish the username change to the events
this.userChanged.emit(this.userName);
this.login({name: this.userName})
})
...
);
}
_
App.component
_import { FacebookLogin } from '../pages/facebook/facebook.component';
public userName;
constructor(fb: FacebookLogin){
this.userName = "";
//subscribe to the page's EventEmitter
this.fb.userChanged.subscribe(username => {
this.userName = username;
});
}
_
または、このS.Oで説明されているように、EventEmitter
をOutput
として使用します。回答: EventEmitterの適切な使用法は何ですか?