Subscribe to Reactive Properties
You can subscribe by detecting only changes in properties instead of events.
You can use reactive properties as a hook.
- JavaScript
- React
- Vue@2
- Vue@3
- Angular
- Svelte
You need to set the inital state in the HTML attributes.
<div class="container">
<div class="buttons">
<button class="prev" disabled>Start</button>
<button class="next">End</button>
</div>
<div class="items horizontal">
<div class="item">1</div>
<div class="item">2</div>
<div class="item">3</div>
<div class="item">4</div>
<div class="item">5</div>
<div class="item">6</div>
<div class="item">7</div>
<div class="item">8</div>
<div class="item">9</div>
<div class="item">10</div>
</div>
</div>
import Conveyer from "@egjs/conveyer";
const conveyer = new Conveyer(".items");
conveyer.subscribe("isReachStart", value => {
document.querySelector(".prev").disabled = value;
});
conveyer.subscribe("isReachEnd", value => {
document.querySelector(".next").disabled = value;
});
import * as React from "react";
import { useConveyer } from "@egjs/react-conveyer";
export default () => {
const ref = useRef();
const { isReachStart, isReachEnd } = useConveyer(ref);
return <div className="container">
<div className="buttons">
<button className="prev" disabled={isReachStart}>Prev</button>
<button className="next" disabled={isReachEnd}>Next</button>
</div>
<div className="items" ref={ref}>
<div className="item">1</div>
<div className="item">2</div>
<div className="item">3</div>
</div>
</div>;
};
<template>
<div class="container">
<button id="prev" :disabled="isReachStart">prev</button>
<button id="next" :disabled="isReachEnd">next</button>
<div class="items" ref="ref">
<div class="item"><a href="#1">1</a></div>
<div class="item"><a href="#2">2</a></div>
<div class="item"><a href="#3">3</a></div>
</div>
</div>
<script>
import { useConveyer } from "@egjs/vue-conveyer";
export default {
setup() {
const { ref, isReachStart, isReachEnd } = useConveyer();
return {
ref,
scrollIntoView,
isReachStart,
isReachEnd,
};
},
});
};
<template>
<div class="container">
<button id="prev" :disabled="isReachStart">prev</button>
<button id="next" :disabled="isReachEnd">next</button>
<div class="items" ref="ref">
<div class="item"><a href="#1">1</a></div>
<div class="item"><a href="#2">2</a></div>
<div class="item"><a href="#3">3</a></div>
</div>
</div>
<script>
import { useConveyer } from "@egjs/vue2-conveyer";
export default {
setup() {
const { ref, isReachStart, isReachEnd } = useConveyer();
return {
ref,
scrollIntoView,
isReachStart,
isReachEnd,
};
},
});
};
There're few ways to interact with child component in Angular.
See Component Interaction page from Angular official document, and use that to interact with Conveyer.
app.component.html
<div class="container">
<button id="prev" [disabled]="conveyer?.isReachStart">prev</button>
<button id="next" [disabled]="conveyer?.isReachEnd">next</button>
<div
class="items"
ngxConveyer
#conveyer="ngxConveyer"
>
<div class="item"><a href="#1">1</a></div>
<div class="item"><a href="#2">2</a></div>
<div class="item"><a href="#3">3</a></div>
<div class="item"><a href="#4">4</a></div>
<div class="item"><a href="#5">5</a></div>
<div class="item"><a href="#6">6</a></div>
<div class="item"><a href="#7">7</a></div>
<div class="item"><a href="#8">8</a></div>
<div class="item"><a href="#9">9</a></div>
<div class="item"><a href="#10">10</a></div>
<div class="item"><a href="#11">11</a></div>
<div class="item"><a href="#12">12</a></div>
</div>
</div>
You need to use $-prefix to read reactiver properties in svelte.
https://svelte.dev/docs#component-format-script-4-prefix-stores-with-$-to-access-their-values
<script lang="ts">
import { useConveyer } from "@egjs/svelte-conveyer";
const { ref, isReachStart, isReachEnd } = useConveyer();
</script>
<div class="container">
<div class="buttons">
<button class="prev" disabled={$isReachStart}>Prev</button>
<button class="next" disabled={$isReachEnd}>Next</button>
</div>
<div class="items" use:ref>
<div class="item">1</div>
<div class="item">2</div>
<div class="item">3</div>
</div>
</div>
See all available events at Conveyer#events.