Vue-infinite-loading

配置加载提示

此组件提供了四种不同的插槽用来显示不同的加载提示:spinnerno-moreno-resultserror,所有插槽的默认值都在右边的预览中列出来了,你还可以通过这里了解更多。

通过组件 Prop

只有 spinner 插槽可以通过 prop 进行配置,并且此时的设定值只能是内置的动画类型:

<infinite-loading spinner="spiral"></infinite-loading>

你可以在右边预览所有内置加载动画,如果你希望创建自己的加载动画,请使用其他方式。

通过 slot 特殊属性

我们可以通过 slot 特殊属性来配置它们:

<infinite-loading>
  <div slot="spinner">Loading...</div>
  <div slot="no-more">No more message</div>
  <div slot="no-results">No results message</div>
</infinite-loading>

与其他插槽不同的是,error 插槽的默认值除了会提供文字信息之外,还会提供一个重试按钮供用户重新尝试加载;在自定义 error 插槽时,如果你也希望提供一个重试按钮给用户,可以使用 slot-scope 功能实现,就像下面这样:

<infinite-loading>
  <div slot="error" slot-scope="{ trigger }">
    Error message, click <a href="javascript:;" @click="trigger">here</a> to retry
  </div>
</infinite-loading>

通过插件 API

在我们构建大型应用时,为了保证所有加载提示的行为一致,此插件支持通过插件 API 统一配置所有的插槽内容,我们只需要传递一个字符串或者 Vue 组件给它就可以了,点击这里了解更多。

在这里 error 插槽仍然是最特殊的哪一个,和使用 slot 特殊属性一样,如果你希望提供一个重试按钮给用户,你可以使用 vm.$attrs 属性,就像这样:

<!-- your own error component -->
<div>
  Error message, click
  <a href="javascript:;" @click="$attrs.trigger">here</a>
  to retry
</div>

如果你想保持变量名的整洁,你也可以定义一个叫做 trigger 的函数属性,并且把它绑定到重试按钮上即可:

// your own error component
export default {
  /* ... */
  props: {
    trigger: Function,
  },
  /* ... */
};

关于隐藏与默认样式

为了便于使用,该组件为插槽内容提供了一些默认样式(font-sizecolorpadding),如果你希望在通过 slot 特殊属性配置插槽时保持默认样式的存在,你需要将插槽内容用 template 标签包裹:

<infinite-loading>
  <!-- The no-more message will has default styles -->
  <template slot="no-more">No more message</template>
</infinite-loading>

如果你希望隐藏某个插槽,你可以创建一个不是 template 标签的空元素,因为 Vue.js 会忽略空的 template 元素:

<infinite-loading>
  <!-- The no-more slot will not be displayed -->
  <span slot="no-more"></span>
</infinite-loading>

如果你希望移除默认样式以避免影响自己的样式,你可以将插槽内容用不是 template 标签的元素包裹:

<infinite-loading>
  <!-- The no-more message will has no default styles -->
  <div slot="no-more">No more message</div>
</infinite-loading>

差点忘了,如果你想通过插件 API 全局配置插槽内容,可以像这样进行控制:

import Vue from 'vue';
import InfiniteLoading from 'vue-infinite-loading';
import InfiniteError from 'path/to/your/components/InfiniteError',

Vue.use(InfiniteLoading, {
  slots: {
    // keep default styles
    noResults: 'No results message',

    // remove default styles
    noMore: InfiniteError,

    // hide slot
    error: {
      render: h => h('div'),
    },
  },
});
上次更新: 11/2/2018, 6:09:02 PM

一款用于 Vue.js 的无限滚动插件

EN | 中文