ionic2
Obejście dla „pokaż-usuń” w dezaprobata
Szukaj…
Rozwiązanie
Tworzę aplikację mobilną przy użyciu ionic 2 z Angular 2.
Mam elementy jonowe wypełnione listą jonową. Chcę, aby te elementy jonowe mogły być usuwane w razie potrzeby, jak przedstawiono tutaj na jonowej stronie internetowej.
Jednak wiele się zmieniło w Ionic 2 od pierwszej wersji i powyższy styl jednego przycisku otwierającego wszystkie elementy jonowe na jednym nie jest już możliwe, ponieważ show-delete i show-reorder nie są już obsługiwane. Jedyną dostępną opcją jest przesuwanie elementu jonowego jako elementu jonowego, co daje nam możliwość przesuwania każdego elementu pojedynczo w celu odsłonięcia przycisku usuwania.
Nie tego chciałem. Chciałem jednego przycisku, który otwiera jednocześnie wszystkie przedmioty jonowe.
Po spędzeniu nad tym czasu wymyśliłem działające rozwiązanie i udało mi się osiągnąć pożądany efekt za pomocą ionic 2, i zamierzam się z tobą podzielić.
Oto moje rozwiązanie:
W pliku .html:
<ion-header>
<ion-navbar>
<ion-buttons start (click)="manageSlide()">
<button>
<ion-icon name="ios-remove"></ion-icon>
</button>
</ion-buttons>
<ion-title>PageName</ion-title>
</ion-navbar>
</ion-header>
i dla listy:
<ion-list #list1>
<ion-item-sliding #slidingItem *ngFor="let contact of contacts | sortOrder">
<button #item ion-item>
<p>{{ item.details }}</p>
<ion-icon id="listIcon" name="arrow-forward" item-right></ion-icon>
</button>
<ion-item-options side="left">
<button danger (click)="doConfirm(contact, slidingItem)">
<ion-icon name="ios-remove-circle-outline"></ion-icon>
Remove
</button>
</ion-item-options>
</ion-item-sliding>
</ion-list>
W pliku .ts najpierw wykonaj importowanie:
import { ViewChild } from '@angular/core';
import { Item } from 'ionic-angular';
import { ItemSliding, List } from 'ionic-angular';
następnie odwołaj się do elementu html, deklarując ViewChild:
@ViewChild(List) list: List;
Na koniec dodaj swoje klasy, aby obsłużyć pracę:
public manageSlide() {
//loop through the list by the number retreived of the number of ion-item-sliding in the list
for (let i = 0; i < this.list.getElementRef().nativeElement.children.length; i++) {
// retreive the current ion-item-sliding
let itemSlide = this.list.getElementRef().nativeElement.children[i].$ionComponent;
// retreive the button to slide within the ion-item-sliding
let item = itemSlide.item;
// retreive the icon
let ic = item._elementRef.nativeElement.children[0].children[1];
if (this.deleteOpened) {
this.closeSlide(itemSlide);
} else {
this.openSlide(itemSlide, item, ic);
}
}
if (this.deleteOpened) {
this.deleteOpened = false;
} else {
this.deleteOpened = true;
}
}
Następnie klasa otwierająca:
private openSlide(itemSlide: ItemSliding, item: Item, inIcon) {
itemSlide.setCssClass("active-sliding", true);
itemSlide.setCssClass("active-slide", true);
itemSlide.setCssClass("active-options-left", true);
item.setCssStyle("transform", "translate3d(72px, 0px, 0px)")
}
I klasa zamykająca:
private closeSlide(itemSlide: ItemSliding) {
itemSlide.close();
itemSlide.setCssClass("active-sliding", false);
itemSlide.setCssClass("active-slide", false);
itemSlide.setCssClass("active-options-left", false);
}
Mam nadzieję, że ci to pomoże.
Ciesz się dobrym kodowaniem ...