# Overview
mint-loadmore is a two-direction mobile pull-to-refresh component for vue.js.
# Installation
```bash
$ npm install mint-loadmore
```
# Usage
Import `mint-loadmore` to your project:
```Javascript
require('mint-loadmore/lib/index.css');
// ES6 mudule
import Loadmore from 'mint-loadmore';
// CommonJS
const Loadmore = require('mint-loadmore').default;
```
Register component:
```Javascript
Vue.component('loadmore', Loadmore);
```
Then use it:
```html
...
```
# Example
Visit [this page](http://leopoldthecoder.github.io/Demos/vue-loadmore/index.html) using your mobile device.
```html
↓
Loading...
```
For upward direction, pull the component `topDistance` pixels away from the top and then release it, the function you appointed as `top-method` will run:
```Javascript
loadTop(id) {
...// load more data
this.$broadcast('onTopLoaded', id);
}
```
At the end of your `top-method`, don't forget to broadcast the `onTopLoaded` event so that `mint-loadmore` removes `topLoadingText`. Note that a parameter called `id` is passed to `loadTop` and `onTopLoaded`. This is because after the top data is loaded, some reposition work is performed inside a `mint-loadmore` instance, and `id` simply tells the component which instance should be repositioned. You don't need to do anything more than passing `id` to `onTopLoaded` just as shown above.
For downward direction, things are similar. To invoke `bottom-method`, just pull the component `bottomDistance` pixels away from the bottom and then release it.
```Javascript
loadBottom(id) {
...// load more data
this.allLoaded = true;// if all data are loaded
this.$broadcast('onBottomLoaded', id);
}
```
Remember to set `bottom-all-loaded` to `true` after all data are loaded. And of course broadcast `onBottomLoaded` with `id`.
You can customize the top and bottom DOM using an HTML template. For example, to customize the top DOM, you'll need to add a variable that syncs with `top-status` on `loadmore` tag, and then write your template with a `slot` attribute set to `top` and `class` set to `mint-loadmore-top`. `top-status` has three possible values that indicates which status the component is at:
* `pull` if the component is being pulled yet not ready to drop (top distance is within the distance threshold defined by `topDistance`)
* `drop` if the component is ready to drop
* `loading` if `topMethod` is running
And of course, if a top HTMl template is given, `topPullText`, `topDropText` and `topLoadingText` are all unnecessary.
Don't need to load data from upward direction? Simply omit the `topMethod` attribute. Same goes to downward.
Upon loaded, `loadmore` will automatically check if it is tall enough to fill its container. If not, `bottom-method` will run until its container is filled. Turn off `auto-fill` if you'd rather handle this manually.
# API
| Option | Description | Value | Default |
|-------------------|------------------------------------------------------------------|----------|-------------|
| autoFill | if `true`, `loadmore` will check and fill its container | Boolean | true |
| topPullText | top text when the component is being pulled down | String | '下拉刷新' |
| topDropText | top text when the component is ready to drop | String | '释放更新' |
| topLoadingText | top text while `topMethod` is running | String | '加载中...' |
| topDistance | distance threshold that triggers `topMethod` | Number | 70 |
| topMethod | upward load-more function | Function | |
| bottomPullText | bottom text when the component is being pulled up | String | '上拉刷新' |
| bottomDropText | bottom text when the component is ready to drop | String | '释放更新' |
| bottomLoadingText | bottom text while `bottomMethod` is running | String | '加载中...' |
| bottomDistance | distance threshold that triggers `bottomMethod` | Number | 70 |
| bottomMethod | downward load-more function | Function | |
| bottomAllLoaded | if `true`, `bottomMethod` can no longer be triggered | Boolean | false |
# License
MIT