【问题标题】:ionic 2 - item slider - slide to trigger functionionic 2 - 项目滑块 - 滑动触发功能
【发布时间】:2017-01-04 22:22:52
【问题描述】:

我有带有 3 个按钮的 ionic-item-sliding 指令。 2(A 和 B)在我向左滑动时出现,1(按钮 C)在右侧出现。

我想实现当我真正将项目拖到最右边时触发按钮C下的功能的行为。

ionic2 主页上的文档以该代码 sn-p 为例

ondrag(event, item) {
  let percent = event.getSlidingPercent();
  if (percent > 0) {
    // positive
    console.log('right side');
  } else {
    // negative
    console.log('left side');
  }
  if (Math.abs(percent) > 1) {
        this.navCtrl.push(NextPage,{param:item},{ animate: true, direction: 'forward' })
  }
}

使用它

<ion-item-sliding *ngFor="let item of items "(ionDrag)="ondrag($event, item)"></ion-item-sliding>

我的行为是,当我滑动太多时,它会多次调用并推送页面(我猜我抛出的事件数一样多)

关于如何正确实现这一点有什么建议吗?

谢谢!

【问题讨论】:

    标签: angular typescript ionic-framework ionic2 ionic3


    【解决方案1】:

    您可以添加一个标志以确保 push() 方法只执行一次。

    import { Component } from "@angular/core";
    import { NavController } from 'ionic-angular/index';
    import { Page1 } from 'page1.ts';
    
    @Component({
         templateUrl:"home.html"
    })
    export class HomePage {
    
      private alreadyPushed: boolean;
    
      private items: Array<any>;
    
      private selectedItem: any;
    
      constructor(private navCtrl: NavController) {
        this.items = [
          'City of Amsterdam',
          'City of Bogota',
          'City of Buenos Aires',
          'City of Dhaka'
        ];
      }
    
      ionViewDidEnter() {
        // Initialize the flag
        this.alreadyPushed = false;
    
        if(this.selectedItem) {
          // Reset the selected item
          this.selectedItem._setOpenAmount(0);
        }
    
      }
    
      ondrag(event, item) {
        let percent = event.getSlidingPercent();
        if (percent > 1 && !this.alreadyPushed) {
    
          // Store the event to reset it later
          this.selectedItem = event;
    
          // Set the flag to true
          this.alreadyPushed = true;
    
          // Push the new page
          this.navCtrl.push(Page1, { param : item });
        }
      }
    }
    

    另外请注意,你应该使用percent &gt; 1而不是Math.abs(percent) &gt; 1,这样你只有在向右滑动时才会推动页面。

    【讨论】:

    • 感谢您的回复,一个问题是,当页面被弹出时,项目仍然“滑动”。有没有办法重置位置?
    • 我已经更新了答案和plunker,现在它会在返回视图时重置项目:)
    • 嗨,抱歉忘了确认,是的,非常感谢!我将使用 ionViewDidLeave()
    • 很高兴听到这个消息:)
    猜你喜欢
    • 2020-08-27
    • 2016-02-09
    • 2016-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多