Ionic-framework: [Ionic V4.0.0-beta.7] [ion-item-sliding]在清空数组中的元素后,滑动不起作用

创建于 2018-09-07  ·  30评论  ·  资料来源: ionic-team/ionic-framework

错误报告

离子信息
从终端/ cmd提示符运行ionic info ,然后将输出粘贴到下面。

Ionic:

   ionic (Ionic CLI)          : 4.1.2 (C:\Users\fkrishna\AppData\Roaming\npm\node_modules\ionic)
   Ionic Framework            : @ionic/angular 4.0.0-beta.7
   @angular-devkit/core       : 0.7.5
   @angular-devkit/schematics : 0.7.5
   @angular/cli               : 6.1.5
   @ionic/ng-toolkit          : 1.0.8
   @ionic/schematics-angular  : 1.0.6

System:

   NodeJS : v8.11.3 (C:\Program Files\nodejs\node.exe)
   npm    : 5.6.0
   OS     : Windows 10

描述错误
我创建了一个由3个元素组成的数组,并使用了指令以显示滑动项列表。 每个项目都有一个删除按钮以删除目标元素,但是在删除一个元素后,滑动止动件可用于其余项目

重现步骤
重现行为的步骤:

  1. 去 '...'
  2. 点击 '....'
  3. 向下滚动到“ ....”
  4. 看到错误

相关代码

<ion-content>
  <ion-list>
    <ion-item-sliding *ngFor="let n of numbers; index as i">
      <ion-item>
        {{ n }}
      </ion-item>
      <ion-item-options>
        <ion-item-option " (click)="remove(i)">Delete</ion-item-option>
      </ion-item-options>
    </ion-item-sliding>
  </ion-list>
numbers = ['1','2','3'];
  constructor() {}
  remove(i) {
    this.numbers.splice(i, 1);
}

预期行为
假定即使删除了元素,滑动也能正确地用于每个项目

附加语境
列出与您的问题有关的任何其他信息。 堆栈跟踪,相关问题,如何修复的建议,堆栈溢出链接,论坛链接,屏幕截图,操作系统(如果适用)等。

core bug

最有用的评论

也有相同的问题,其中包含动态元素列表,使用组件,然后刷新元素会导致它直到刷新后才能删除任何其他元素。

深入研究后,我注意到没有刷新元素就可以正常工作,查看文档可以找到一种方法来关闭项目或列表上的所有滑动项目。 使用此解决了问题。

  1. 给离子列表一个ID #dynamicList
  2. 通过ID @ViewChild('dynamicList') dynamicList;访问该列表
  3. 单击<ion-item-option> ,在删除记录之前触发dynamicList.closeSlidingItems()

希望在此期间有所帮助,我是新来的有经验的人,所以希望我没有做任何愚蠢的事情。

所有30条评论

我有同样的问题。
顺便说一句,滑动项在删除后不起作用,需要重新加载应用

@ quynh-ng我有同样的问题,我不得不降级到beta.5 :(

有趣的是,也碰到了这个问题,可以确认,如果我对滑动列表中的项目进行操作删除,剩下的项目将无法再滑动

ps:在beta.8中也是如此

@ quynh-ng一样-_-

也有相同的问题,其中包含动态元素列表,使用组件,然后刷新元素会导致它直到刷新后才能删除任何其他元素。

深入研究后,我注意到没有刷新元素就可以正常工作,查看文档可以找到一种方法来关闭项目或列表上的所有滑动项目。 使用此解决了问题。

  1. 给离子列表一个ID #dynamicList
  2. 通过ID @ViewChild('dynamicList') dynamicList;访问该列表
  3. 单击<ion-item-option> ,在删除记录之前触发dynamicList.closeSlidingItems()

希望在此期间有所帮助,我是新来的有经验的人,所以希望我没有做任何愚蠢的事情。

并非所有英雄都披上斗篷,谢谢

的HTML:

 <ion-list #slidingList>
   <ion-item-sliding>
     <ion-item-options side="end">
        <ion-item-option (click)="delete()">
        </ion-item-option>
     </ion-item-options>
   </ion-item-sliding>
 </ion-list>

ts:

 import {List} from '@ionic/angular';

 @ViewChild('slidingList') slidingList: List;

 async delete() {
   // something
   await this.slidingList.closeSlidingItems();
 }

@peterpeterparker它工作正常,但这是解决方案还是解决方法?

@ Anthony2539可能两者都有点:stuck_out_tongue_winking_eye:

我不知道这是功能请求还是错误

我认为最近做出了一些有关滑动的承诺,所以问题可能/将会消失

无论如何,假设解决方法可行,并且我无法武装我的应用

我会说这更多是一个错误,因为我不得不降级才能使我的e2e测试再次通过

这个问题显然是一个错误。 删除项目不需要在删除之前将其关闭,这很有趣。

我发现另一种解决方法是将对ItemSliding的引用传递给delete方法,然后在删除列表项之前关闭该项:

HTML:

<ion-list>
  <ion-item-sliding *ngFor="let item of items" #slidingItem>
    <ion-item>>
      {{item.text}}
    </ion-item>
    <ion-item-options (ionSwipe)="deleteItem(slidingItem, item)">
      <ion-button color="danger" (click)="deleteItem(slidingItem, item)">
        <ion-icon name="trash"></ion-icon>
        Delete
      </ion-button>
    </ion-item-options>
  </ion-item-sliding>
</ion-list>

TS:

async deleteItem(slidingItem: ItemSliding, item: Item) {
    slidingItem.close(); // <-- this is the important bit!
    await this.itemService.deleteItem(item);
  }

@ mimacom-klier非常感谢您完美地解决了我的问题。

不适合我!

无论有没有调用closecloseSlidingItems方法,解决方法对我都不起作用。
我注意到的是:在我隐藏然后再次显示项目之后,滑动不会_似乎起作用,但是如果尝试滑动项目然后单击“应该”在何处,则实际上可以触发按钮动作。
这是一个Stackblitz示例
在Stackblitz上,我使用的是@ionic/[email protected] ,但是本地计算机上的@ionic/[email protected]也存在问题。

@bockoblur :我检查了您的Stackblitz示例,并对其进行了一些测试。 如果您实际上从列表中删除了项目,则解决方法似乎正常。 如果仅隐藏它们,然后再次显示它们,则行为与您所描述的完全相同。 这似乎是转换的问题:转换未正确应用于列表项元素。 也许ItemSliding组件仍使用旧的DOM引用来翻译项目。 您可以在这里找到我的修改示例: https :

感谢您查看这个。 可以。
尽管如此,这仍然是离子团队需要解决的问题。

@ mimacom-klier解决方法适用于最新的Ionic(4.5.0)。

编辑:使用@jcollings解决方案还可以用于添加和/或更新项目,这对我造成了同样的问题。 谢谢!

此解决方案适用于我使用以下方法:
离子CLI:4.5.0
离子框架:@ ionic / angular 4.0.0-beta.17

但是,我认为这仍然是应该解决的问题,我怀疑任何开发人员都会期望这种行为。

我也是。 解决方法shmorkaround。 最主要的是它使我摆脱了困境,对此我非常感谢

Wauw ..整天都在忙着这个问题(更新列表项后,幻灯片也无法正常工作)。 现在找出原因。 谢谢@jcollings的解决方法。 希望此错误将得到解决。

你好

面临以下问题:

问题:
离子项目滑动仅适用于第一次。 当我滑动离子项目时,它停止响应,然后转到另一页并返回。

尝试了@jcollings建议的解决方法。 尝试在离开视图时关闭所有离子项目滑动,如下所示:

ionViewWillLeave() {
    setTimeout(async() => {
      console.log('sliding list: ', this.slidingList);
      if(this.slidingList){
        await this.slidingList.closeSlidingItems();
      }
    },1000);
  }

但是没有用

我的滑块代码如下:

<ion-list #slidingList class="notifications" *ngIf="notificationCheck === 'true'">
    <ion-item-sliding *ngFor="let notification of notifications; index as i;">
      <ion-item lines="none" no-padding>
        <ion-row>
          <ion-col size="12" class="title">
            {{notification.title}}
          </ion-col>
          <ion-col size="12" class="description">
            {{notification.message}}
          </ion-col>
          <ion-col size="12" class="date-time">
            {{notification.createdDate | date:'medium'}}
          </ion-col>
          <i class="left-arrow"></i>
        </ion-row>
      </ion-item>
      <ion-item-options side="end">
        <ion-item-option color="secondary" (click)="goToURL(notification.actionURL)">
          <div slot="icon-only">
            <i class="fa fa-edit" *ngIf="notification.actionType === 'UPDATE'"></i>
            <i class="fa fa-eye" *ngIf="notification.actionType === 'VIEW'"></i>
          </div>
        </ion-item-option>
        <ion-item-option color="danger" (click)="deleteNotifications(notification.id)">
          <div slot="icon-only">
            <i class="fa fa-trash"></i>
          </div>
        </ion-item-option>
      </ion-item-options>
    </ion-item-sliding>
  </ion-list>

尝试使用最新的离子版本4.0.0-rc.0。 问题仍然存在。

你好

尝试解决此问题,发现在我的案例中,“离子项目滑块”无响应的罪魁祸首是,无论何时更改视图,滑动选项都不会关闭。 所以我做了以下事情,它工作得很好:

constructor(private location: Location,  private router: Router) {

    this.navigationSubscription = this.router.events.subscribe(async(e: any) => {
      if (e instanceof NavigationStart) {
        if(this.slidingList){
          await this.slidingList.closeSlidingItems();
        }
      }
    });

  }

非常感谢@jcollings。

我穿了这个:
在.html中

<ion-item-sliding #slidingItem>
<ion-item-option color="danger" (click)="del(slidingItem,carte)">Supprimer</ion-item-option>
in .ts
import {  IonItemSliding } from '@ionic/angular';

async del(slidingItem: IonItemSliding, carte){
    await slidingItem.close();
    let index = this.cartes.indexOf(carte);
        if(index > -1){
            this.cartes.splice(index, 1);
        }
}

完美运作
非常感谢@jcollings。

可以使用4.0.0-rc.0确认问题仍然存在。

也可以确认这在4.0.0-rc.1中存在

此错误仍存在于4.0.0-rc.2中。
我在虚拟滚动中使用了离子项目滑动,因此无法使用List.closeSlidingItems()。
如果我不关闭滑动的项目并使用“后退”按钮或其他按钮离开视图,则滑动的项目下次将完全停止工作。 在这种情况下,我无法使用(click)事件,因为我打开了滑动框就离开了。 捕获(单击)事件没有变化。

另一个解决方法。 这个对我有用。

in .html
<ion-item-sliding>....</ion-item-sliding>

in .ts
import {  IonItemSliding } from '@ionic/angular';
  @ViewChild(IonItemSliding) itemSliding: IonItemSliding;
   ionViewWillLeave() {
        setTimeout(() => { this.itemSliding.closeOpened(); }, 500);
   }

亲爱的白兰地,

@brandyscarney你可以看看吗? 我们正处于向v4迁移的阶段,我想听听离子团队的意见。 在我看来很重要。

太谢谢了。
诺伯特

感谢您为我加标签! 我将其添加到我们的项目委员会进行调查。

@manucorporat @mhartington @paulstelzer

谢谢这个问题! PR#17492已将其合并。 它将在下一个发行版中: 4.1.0 。 之后,如果您仍然遇到问题,请告诉我们。

谢谢你的问题! 该问题已被锁定,以防止发表与原始问题无关的评论。 如果这仍然是最新版本的Ionic的问题,请创建一个新的问题,并确保模板已完全填写。

此页面是否有帮助?
0 / 5 - 0 等级