How to update value inside ionic 2 side menu

后端 未结 1 2097
天涯浪人
天涯浪人 2021-02-08 10:24

How to \"transfer\" date from page into side-menu in Ionic2, i.e - Having app.page.html like following:



        
相关标签:
1条回答
  • 2021-02-08 10:35

    ionic2 - using Events

    Check out the Events docs

    They allow you to 'publish' an action from any page, and subscribe to it in another page to retrieve the value. Your scenario would look a bit like this.

    Import (both on Facebooklogin.component and app.component)

    import { Events } from 'ionic-angular'; and in your constructor constructor(public events: Events)

    Then, whenever you change your userName (f.e. in the handler of the facebook login) publish the value like this.

    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})
                })
            //...
          );
      }
    

    And subscribe to any publishes being made in your app.component

    userName: string;
    
    constructor(events: Events) {
       this.userName = "not logged in";
    
       events.subscribe('username:changed', username => {
          if(username !== undefined && username !== ""){
            this.userName = username;
          }
       }) //... 
    }
    

    angular2 - using 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;
        });
    }
    

    OR use the EventEmitter as an Output as described in this S.O. answer: What is the proper use of an EventEmitter?

    0 讨论(0)
提交回复
热议问题