【发布时间】:2019-09-15 11:34:01
【问题描述】:
我正在使用<ion-list> 和<ion-sliding-item>。内部项目有一个(click) 事件(click)="goToDetail(message.id)"。
<ion-list #messageList>
<ion-item-sliding *ngFor="let message of messages">
<ion-item detail (click)="goToDetail(message.id)">
<ion-label>
{{ message.text }}
</ion-label>
</ion-item>
<ion-item-options>
<ion-item-option (click)="confirmDelete(message.id)">Delete</ion-item-option>
</ion-item-options>
</ion-item-sliding>
</ion-list>
通常,当单击项目时,我希望触发单击事件。
但是,如果我滑动其中一个项目,显示“删除”选项,然后单击另一个项目,滑动项目关闭,然后触发另一个项目的 (click) 事件。
我想阻止这个点击事件。我读过documentation 并看到<ion-list> 有一个closeSlidingItems() 方法。所以,我希望我可以简单地将我的点击事件更改为:
(click)="messageList.closeSlidingItems() || goToDetail(message.id)"
但是,closeSlidingItems() 方法返回一个承诺,而不是布尔值。好的,没问题,我想用这个检查来包装我的 goToDetail() 函数。
public goToDetail(threadId) {
this.messageList.closeSlidingItems()
.then(sliderWasClosed => {
if (!sliderWasClosed) {
this.nav.navigateForward('app/conversation/' + threadId);
}
});
}
但是,我发现承诺总是返回false,即使滑动项实际上已关闭。我怀疑这是因为关闭操作是自动发生的,并且在调用我的函数时,该项目已经关闭。
我的总体目标是在滑块打开时防止(click) 事件。如果closeSlidingItems() 方法能返回正确的值,我当前的代码就可以工作。
当我自己调用closeSlidingItems() 时,有什么方法可以阻止滑动项目的自动关闭以获得正确的结果?
除了(click) 之外,我还应该使用其他事件吗?
我有什么其他想法可以让它工作吗?
【问题讨论】:
-
它澄清你的问题究竟是什么?您要停止哪个点击事件?
-
@IraW 我试图阻止任何
上的单击事件,只要打开任何滑块项。我想我真的不需要抑制点击事件,但我希望根据是否有任何滑块项处于打开位置来做出不同的行为。 -
我会添加一个类,当其他项目打开时将
pointer-events: none;应用于其他项目。
标签: angular ionic-framework ionic4