分类标签

标签这边的数据传递与侧边背景的数据传递是一样的。都是通过 props 传递数据。

这边重点看几个操作:加载,切换,排序。

加载

加载发生在刚进入页面或切换数据时,tag 标签旁边会出现 loading 的动画。

整个流程是这样的:先从父组件那边获取 isFetching ,判断是否在加载,如果在加载,显示 loading 图片,data 函数提供数据全新副本。

// components/Home/tags.vue

<template>
    ...
    <img v-show="isFetching" class="loader-tiny" :src="loadingImg" alt="Tiny">
    ...
</template>

<script>
import tiny from '../../assets/images/tiny.gif'

export default {
  props: [... 'isFetching'],
  data(){
    return {
      loadingImg: tiny
    }
  }
  ...
}
</script>
// vuex/modules/article.list.js

...
[REQUEST_ARTICLE_LIST](state){
    state.isFetching = true
}
...

获取完文章列表,会改变 isFetching 的值:

// vuex/actions.js

//getArticleList
export const getArticleList = ({ dispatch }, options, isAdd) => {
    dispatch(types.REQUEST_ARTICLE_LIST)
    ...
}
...
// vuex/modules/article.list.js 

...
[GET_ARTICLE_LIST_FAILURE](state){
    state.isFetching = false
}
...

切换标签

点击标签切换,主要完成两件事情:改变标签选中、加载对应标签文章列表。

改变标签

在 tags 组件里定一个了 changeTag() 方法:

// components/Home/tags.vue

...
<a :class="{'active':(options.tagId == tag._id)}" @click.prevent="changeTag(tag._id)" href="javascript:;">
    {{tag.name}}
</a>
...

...
changeTag(tagId){
    this.$parent.handleChange({'currentPage':1,'sortName':'','tagId':tagId})
}
...

this.$parent 指向其父组件,其定一个了 handleChange() 方法用于处理切换:

// components/Home/index.vue

...
vuex:{
    getters:{
        ...
        options: ({options}) => options.item,
        ...
    },
    actions:{
        ...
        changeOptions,
        ...
    }
}
...

...
handleChange(options,isAdd=false){
    this.changeOptions(options)
    this.getArticleList(this.options,isAdd)
}
...

results matching ""

    No results matching ""