RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 1262473
Accepted
HamSter
HamSter
Asked:2022-03-27 16:03:53 +0000 UTC2022-03-27 16:03:53 +0000 UTC 2022-03-27 16:03:53 +0000 UTC

使用 vuex 显示过滤列表

  • 772

有这么一个小项目:codesandbox

帖子列表并选择过滤器。

家.vue:

<b-form-select v-model="selected" :options="options"></b-form-select>

<ul v-for="post in getPostsFilter" :key="post.id">
  <li>
    {{ post.id }}
    {{ post.completed }}

     <b-form-checkbox v-model="post.completed">
        I accept the terms and use
     </b-form-checkbox>

    {{ post.title }}
  </li>
</ul>


import { mapActions, mapGetters } from "vuex";

export default {
  name: "Home",
  components: {
    DefaultLayout,
  },
  data() {
    return {
      selected: this.$store.state.selected,
      options: [
        {
          value: "all",
          text: "All",
        },
        {
          value: "completed",
          text: "Completed",
        },
        {
          value: "not_completed",
          text: "Not completed",
        },
      ],
    };
  },
  computed: {
    ...mapGetters(["getPostsFilter"]),
  },
  methods: {
    ...mapActions(["fetchPosts"]),
  },
  mounted() {
    this.fetchPosts();
  },
};
</script>

商店.js:

export default new Vuex.Store({
  state: {
    posts: [],
    selected: "all"
  },
  getters: {
    getPosts(state) {
      return state.posts;
    },
    getPostsFilter(state) {
      if (state.selected === "all") {
        return state.posts;
      }

      if (state.selected === "completed") {
        return state.posts.filter((p) => (p = p.completed));
      }

      if (state.selected === "not_completed") {
        return state.posts.filter((p) => (p = !p.completed));
      }
    }
  },
  mutations: {
    setPosts(state, payload) {
      state.posts = payload;
    }
  },
  actions: {
    async fetchPosts({ commit, dispatch }) {
      axios
        .get(" https://jsonplaceholder.typicode.com/todos/?_limit=3")
        .then((response) => {
          this.commit("setPosts", response.data);
        })
        .catch((err) => {
          console.log(err);
        });
    }
  }
});

问题:在 select completed\not_completed\all 中选择时如何显示过滤列表?

javascript
  • 1 1 个回答
  • 10 Views

1 个回答

  • Voted
  1. Best Answer
    MoloF
    2022-03-27T17:31:03Z2022-03-27T17:31:03Z

    更正了您的代码。

    无需解释,立即现成的工作版本:codesandbox

    Store.js. 添加到мутации和actions改变status对象的方法filter

    export default new Vuex.Store({
      state: {
        posts: [],
        filter: {
          status: "all"
        }
      },
      getters: {
        getPosts(state) {
          return state.posts;
        },
        getPostsFilter(state) {
          const { posts, filter } = state;
    
          if (filter.status === "all") return posts;
    
          if (filter.status === "completed")
            return posts.filter((post) => !!post.completed);
    
          if (filter.status === "not_completed")
            return posts.filter((post) => !post.completed);
        }
      },
      mutations: {
        setPosts(state, payload) {
          state.posts = payload;
        },
        setFilterStatus(state, status) {
          state.filter.status = status;
        }
      },
      actions: {
        async fetchPosts({ commit }) {
          try {
            const { data } = await axios.get(
              " https://jsonplaceholder.typicode.com/todos/?_limit=10"
            );
            commit("setPosts", data);
          } catch (e) {
            console.error(e);
          }
        },
        setFilterStatus({ commit }, status) {
          commit("setFilterStatus", status);
        }
      }
    });
    

    Home.vue. 为方法添加mapActions了一个更改状态,添加了watch它,当更改时,将敲入添加的action.

    export default {
      name: "Home",
      components: {
        DefaultLayout,
      },
      data() {
        return {
          selected: this.$store.state.selected,
          options: [
            {
              value: "all",
              text: "All",
            },
            {
              value: "completed",
              text: "Completed",
            },
            {
              value: "not_completed",
              text: "Not completed",
            },
          ],
        };
      },
      computed: {
        ...mapGetters(["getPostsFilter"]),
      },
      methods: {
        ...mapActions(["fetchPosts", 'setFilterStatus']),
      },
      mounted() {
        this.fetchPosts();
      },
      watch: {
        selected(value) {
          this.setFilterStatus(value);
        } 
      }
    };
    
    • 3

相关问题

  • 第二个 Instagram 按钮的 CSS 属性

  • 由于模糊,内容不可见

  • 弹出队列。消息显示不正确

  • 是否可以在 for 循环中插入提示?

  • 如何将 JSON 请求中的信息输出到数据表 Vuetify vue.js?

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    表格填充不起作用

    • 2 个回答
  • Marko Smith

    提示 50/50,有两个,其中一个是正确的

    • 1 个回答
  • Marko Smith

    在 PyQt5 中停止进程

    • 1 个回答
  • Marko Smith

    我的脚本不工作

    • 1 个回答
  • Marko Smith

    在文本文件中写入和读取列表

    • 2 个回答
  • Marko Smith

    如何像屏幕截图中那样并排排列这些块?

    • 1 个回答
  • Marko Smith

    确定文本文件中每一行的字符数

    • 2 个回答
  • Marko Smith

    将接口对象传递给 JAVA 构造函数

    • 1 个回答
  • Marko Smith

    正确更新数据库中的数据

    • 1 个回答
  • Marko Smith

    Python解析不是css

    • 1 个回答
  • Martin Hope
    Alexandr_TT 2020年新年大赛! 2020-12-20 18:20:21 +0000 UTC
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5