ion-infinite-scroll
Thành phần Infinite Scroll gọi một hành động sẽ được thực hiện khi người dùng cuộn một khoảng cách cụ thể từ cuối hoặc đầu trang.
Biểu thức được gán cho ion-Infinite sự kiện được gọi khi người dùng đạt đến khoảng cách xác định đó. Khi biểu thức này đã hoàn thành bất kỳ và tất cả các tác vụ, nó sẽ gọi complete() phương thức trên cá thể cuộn vô hạn.
infinite scroll content
Thànhphần ion-infinite-scroll có logic cuộn vô hạn. Nó yêu cầu một thành phần con để hiển thị nội dung. Ionic sử dụng ion-infinite-scroll-content thành phần của nó theo mặc định. Thành phần này hiển thị cuộn vô hạn và thay đổi giao diện tùy thuộc vào trạng thái của cuộn vô hạn. Nó hiển thị một con quay trông đẹp nhất dựa trên nền tảng mà người dùng đang sử dụng. Tuy nhiên, con quay mặc định có thể được thay đổi và có thể thêm văn bản bằng cách thiết lập các thuộc tính trên ion-infinite-scroll-content thành phần.
Custom Content
Tách các thành phần ion-infinite-scroll và ion-infinite-scroll-content cho phép các nhà phát triển tạo các thành phần nội dung của riêng họ, nếu muốn. Nội dung này có thể chứa bất kỳ thứ gì, từ phần tử SVG đến các phần tử có hoạt ảnh CSS độc đáo.
Usage
<ion-content>
<ion-button (click)="toggleInfiniteScroll()" expand="block">
Toggle Infinite Scroll
</ion-button>
<ion-list></ion-list>
<ion-infinite-scroll threshold="100px" (ionInfinite)="loadData($event)">
<ion-infinite-scroll-content
loadingSpinner="bubbles"
loadingText="Loading more data...">
</ion-infinite-scroll-content>
</ion-infinite-scroll>
</ion-content>import { Component, ViewChild } from '@angular/core';
import { IonInfiniteScroll } from '@ionic/angular';
@Component({
selector: 'infinite-scroll-example',
templateUrl: 'infinite-scroll-example.html',
styleUrls: ['./infinite-scroll-example.css']
})
export class InfiniteScrollExample {
@ViewChild(IonInfiniteScroll) infiniteScroll: IonInfiniteScroll;
constructor() {}
loadData(event) {
setTimeout(() => {
console.log('Done');
event.target.complete();
// App logic to determine if all data is loaded
// and disable the infinite scroll
if (data.length == 1000) {
event.target.disabled = true;
}
}, 500);
}
toggleInfiniteScroll() {
this.infiniteScroll.disabled = !this.infiniteScroll.disabled;
}
}<ion-content>
<ion-button onClick="toggleInfiniteScroll()" expand="block">
Toggle Infinite Scroll
</ion-button>
<ion-list></ion-list>
<ion-infinite-scroll threshold="100px" id="infinite-scroll">
<ion-infinite-scroll-content
loading-spinner="bubbles"
loading-text="Loading more data...">
</ion-infinite-scroll-content>
</ion-infinite-scroll>
</ion-content>const infiniteScroll = document.getElementById('infinite-scroll');
infiniteScroll.addEventListener('ionInfinite', function(event) {
setTimeout(function() {
console.log('Done');
event.target.complete();
// App logic to determine if all data is loaded
// and disable the infinite scroll
if (data.length == 1000) {
event.target.disabled = true;
}
}, 500);
});
function toggleInfiniteScroll() {
infiniteScroll.disabled = !infiniteScroll.disabled;
}import { Component, State, h } from '@stencil/core';
@Component({
tag: 'infinite-scroll-example',
styleUrl: 'infinite-scroll-example.css'
})
export class InfiniteScrollExample {
private infiniteScroll: HTMLIonInfiniteScrollElement;
@State() data = [];
componentWillLoad() {
this.pushData();
}
pushData() {
const max = this.data.length + 20;
const min = max - 20;
for (var i = min; i < max; i++) {
this.data.push('Item ' + i);
}
// Stencil does not re-render when pushing to an array
// so create a new copy of the array
// https://stenciljs.com/docs/reactive-data#handling-arrays-and-objects
this.data = [
...this.data
];
}
loadData(ev) {
setTimeout(() => {
this.pushData();
console.log('Loaded data');
ev.target.complete();
// App logic to determine if all data is loaded
// and disable the infinite scroll
if (this.data.length == 1000) {
ev.target.disabled = true;
}
}, 500);
}
toggleInfiniteScroll() {
this.infiniteScroll.disabled = !this.infiniteScroll.disabled;
}
render() {
return [
<ion-content>
<ion-button onClick={() => this.toggleInfiniteScroll()} expand="block">
Toggle Infinite Scroll
</ion-button>
<ion-list>
{this.data.map(item =>
<ion-item>
<ion-label>{item}</ion-label>
</ion-item>
)}
</ion-list>
<ion-infinite-scroll
ref={el => this.infiniteScroll = el}
onIonInfinite={(ev) => this.loadData(ev)}>
<ion-infinite-scroll-content
loadingSpinner="bubbles"
loadingText="Loading more data...">
</ion-infinite-scroll-content>
</ion-infinite-scroll>
</ion-content>
];
}
}<template>
<ion-page>
<ion-content class="ion-padding">
<ion-button @click="toggleInfiniteScroll" expand="block">
Toggle Infinite Scroll
</ion-button>
<ion-list>
<ion-item v-for="item in items" :key="item">
<ion-label>{{ item }}</ion-label>
</ion-item>
</ion-list>
<ion-infinite-scroll
@ionInfinite="loadData($event)"
threshold="100px"
id="infinite-scroll"
:disabled="isDisabled"
>
<ion-infinite-scroll-content
loading-spinner="bubbles"
loading-text="Loading more data...">
</ion-infinite-scroll-content>
</ion-infinite-scroll>
</ion-content>
</ion-page>
</template>
<script lang="ts">
import {
IonButton,
IonContent,
IonInfiniteScroll,
IonInfiniteScrollContent,
IonItem,
IonLabel,
IonList,
IonPage
} from '@ionic/vue';
import { defineComponent, ref } from 'vue';
export default defineComponent({
components: {
IonButton,
IonContent,
IonInfiniteScroll,
IonInfiniteScrollContent,
IonItem,
IonLabel,
IonList,
IonPage
},
setup() {
const isDisabled = ref(false);
const toggleInfiniteScroll = () => {
isDisabled.value = !isDisabled.value;
}
const items = ref([]);
const pushData = () => {
const max = items.value.length + 20;
const min = max - 20;
for (let i = min; i < max; i++) {
items.value.push(i);
}
}
const loadData = (ev: CustomEvent) => {
setTimeout(() => {
pushData();
console.log('Loaded data');
ev.target.complete();
// App logic to determine if all data is loaded
// and disable the infinite scroll
if (items.value.length == 1000) {
ev.target.disabled = true;
}
}, 500);
}
pushData();
return {
isDisabled,
toggleInfiniteScroll,
loadData,
items
}
}
});
</script>Properties
disabled | |
|---|---|
| Description | If Set this to true to disable the infinite scroll from actively trying to receive new data while scrolling. This is useful when it is known that there is no more data that can be added, and the infinite scroll is no longer needed. |
| Attribute | disabled |
| Type | boolean |
| Default | false |
position | |
| Description | The position of the infinite scroll element. The value can be either |
| Attribute | position |
| Type | "bottom" | "top" |
| Default | 'bottom' |
threshold | |
| Description | The threshold distance from the bottom of the content to call the |
| Attribute | threshold |
| Type | string |
| Default | '15%' |
Events
| Name | Description |
|---|---|
ionInfinite | Emitted when the scroll reaches the threshold distance. From within your infinite handler, you must call the infinite scroll's `complete()` method when your async operation has completed. |
Methods
complete | |
|---|---|
| Description | Call |
| Signature | complete() => Promise<void> |
ion-infinite-scroll-content
ion-infinite-scroll-content là con mặc định được sử dụng bởi ion-infinite-scroll. Nó hiển thị một con lăn cuộn vô hạn trông đẹp nhất dựa trên nền tảng và thay đổi giao diện tùy thuộc vào trạng thái của cuộn vô hạn. Con quay mặc định có thể được thay đổi và có thể thêm văn bản bằng cách đặt các thuộc tính loadingSpinner và loadingText.
React
Thành phần ion-infinite-scroll-content không được hỗ trợ trong React.
Usage
<ion-content>
<ion-infinite-scroll>
<ion-infinite-scroll-content
loadingSpinner="bubbles"
loadingText="Loading more data…">
</ion-infinite-scroll-content>
</ion-infinite-scroll>
</ion-content><ion-content>
<ion-infinite-scroll>
<ion-infinite-scroll-content
loading-spinner="bubbles"
loading-text="Loading more data…">
</ion-infinite-scroll-content>
</ion-infinite-scroll>
</ion-content>import { Component, h } from '@stencil/core';
@Component({
tag: 'infinite-scroll-content-example',
styleUrl: 'infinite-scroll-content-example.css'
})
export class InfiniteScrollContentExample {
render() {
return [
<ion-content>
<ion-infinite-scroll>
<ion-infinite-scroll-content
loadingSpinner="bubbles"
loadingText="Loading more data...">
</ion-infinite-scroll-content>
</ion-infinite-scroll>
</ion-content>
];
}
}<template>
<ion-page>
<ion-content>
<ion-infinite-scroll>
<ion-infinite-scroll-content
loading-spinner="bubbles"
loading-text="Loading more data…">
</ion-infinite-scroll-content>
</ion-infinite-scroll>
</ion-content>
</ion-page>
</template>
<script lang="ts">
import {
IonContent,
IonInfiniteScroll,
IonInfiniteScrollContent,
IonPage
} from '@ionic/vue';
import { defineComponent } from 'vue';
export default defineComponent({
components: {
IonContent,
IonInfiniteScroll,
IonInfiniteScrollContent,
IonPage
}
});Properties
loadingSpinner | |
|---|---|
| Description | An animated SVG spinner that shows while loading. |
| Attribute | loading-spinner |
| Type | "bubbles" | "circles" | "circular" | "crescent" | "dots" | "lines" | "lines-small" | null | undefined |
loadingText | |
| Description | Optional text to display while loading. For more information: Security Documentation |
| Attribute | loading-text |
| Type | IonicSafeString | string | undefined |

0 Nhận xét