【问题标题】:How to pass parameters in pop method of ionic2如何在ionic2的pop方法中传递参数
【发布时间】:2016-03-30 14:59:15
【问题描述】:

我尝试在ionic2的push方法中传递参数。像这样

this.nav.push(SecondPage, {
    thing1: data1,
    thing2: data2
});

但是有什么方法可以在 pop() 中传递参数。

【问题讨论】:

  • Present方法中如何传递参数??
  • Pop 目前只接受过渡选项。是否必须使用pop与上一页通信?我之前在第二页中使用了 navParams 来接收来自第一页的回调。 之后我转换回第一页 - 请参阅 (slightly old) documentation] 了解异步详细信息 - 我能够运行回调并执行第一页中需要的任何操作。我不确定这是否能让你到达你想要的地方,但这是另一个需要考虑的想法。

标签: javascript angular ionic2


【解决方案1】:

这就是我在 ionic-3 中实现它并发现它更容易的方法。

我们从哪里弹出()的页面

 this.navCtrl.getPrevious().data.thing1 =data1;
 this.navCtrl.getPrevious().data.thing2 =data2;
 this.navCtrl.pop();

pop() 之后的页面:

public ionViewWillEnter() {
     this.thing1 = this.navParams.get('thing1')|| null;
     this.thing2 = this.navParams.get('thing2')|| null;
} 

【讨论】:

    【解决方案2】:

    我建议你使用Events。您所要做的就是订阅父页面上的事件,然后将事件发布到传递您想要的数据的子页面上:

    // taken from the docs
    import { Events } from 'ionic-angular';
    
    constructor(public events: Events) {}
    
    // first page (publish an event when a user is created)
    function createUser(user) {
      console.log('User created!')
      events.publish('user:created', user);
    }
    
    // second page (listen for the user created event)
    events.subscribe('user:created', (userEventData) => {
      // userEventData is an array of parameters, so grab our first and only arg
      console.log('Welcome', userEventData[0]);
    });
    

    【讨论】:

    • 非常好的答案!!
    • 我不知道我怎么忽略了Events这么久
    • 父子数据传递时使用事件。
    【解决方案3】:

    目前,我认为没有办法做到这一点。

    虽然有一个Github issue,但 Ionic 核心团队对此进行了很好的讨论。听起来他们也将其添加到 Ionic 2 路线图中! Github issue 也有一些建议的变通方法,例如将 ParentPage 添加到去 ChildPage 的 NavParams 中,但这一切都相当 hacky。

    【讨论】:

      【解决方案4】:

      更新:它应该可以工作,但它没有


      好像有|See Doc Reference|

      pop(opts) 采用object 类型的一个参数

      所以

      退一步

      this.nav.pop({
          thing1: data1,
          thing2: data2
      });
      

      并转到历史堆栈中的特定视图

      this.nav.popTo(SecondPage, {
          thing1: data1,
          thing2: data2
      });
      

      进入栈根

      this.nav.popToRoot({
          thing1: data1,
          thing2: data2
      });
      

      检索参数 (我想这应该可行。未经测试!)

      export class SecondPage{
       constructor(params: NavParams){
         this.params = params;
      
         console.log(this.params.get('thing1'));
       }
      }
      

      【讨论】:

      • 嗨,非常感谢您的回答。我现在可以传递参数,但是如何在 'SecondPage' 中检索这些参数。在 Push() 我猜 ion-page 正在刷新并且我正在获取参数。你能帮我解决这个问题吗?
      • 如何在 Present 方法上发送 Navparams ??
      • 根据链接到的文档,可以传递给pop 方法的唯一对象是NavOpts 对象。 You can read the documentation for NavOptions 在同一页面上,就在下面。它本质上是关于导航本身的动画、缓动和方向的一些选项。将参数传递给 pop 是当前的功能请求。你可以关注 Ionic 的Github 上的讨论。
      【解决方案5】:

      使用popTo() 代替pop()

      popTo()params? 参数,您可以像这样传递参数:

          this.nav.popTo(SecondPage, {
          thing1: data1,
          thing2: data2
      });
      

      【讨论】:

        【解决方案6】:

        在此论坛中由 aaronksaunders 转换时传递回调

        https://forum.ionicframework.com/t/solved-ionic2-navcontroller-pop-with-params/58104/4

        去试试看。

        【讨论】:

          【解决方案7】:

          对于使用 pop 发送的数据,您可以使用 getPrevious() 方法。

          从当前页面离开时获取上一页面并发送数据

          ionViewWillLeave() {
              this.navCtrl.getPrevious().data.formData = {credentials: {...}};
          }
          

          在下一页从 navParams 获取数据

          ionViewWillEnter() {
              if (this.navParams.get('formData')) {
                // do something
              }
            }
          

          【讨论】:

            【解决方案8】:

            如果你使用离子角度应用,你可以使用ionic-angular Events

            page1.ts

            import { Events,NavController } from 'ionic-angular';
            
            export class page1 {
            
                constructor(private events: Events,
                            private nvCtrl: NavController
                           ) {}
            
                 goToPage2() {
                     this.navCtrl.pop();
                     this.event.publish('your-event');
             }
            
            }
            

            page2.ts

            import { Events} from 'ionic-angular';
            
            export class page1 {
            
                constructor(private events: Events,
                            private nvCtrl: NavController
                           ) {}
            
                 ionViewDidLoad() {
                    this.events.subscribe('your-event');
              }
            

            }

            【讨论】:

              猜你喜欢
              • 2017-03-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2016-11-19
              • 1970-01-01
              相关资源
              最近更新 更多