vue实现单一筛选、删除筛选条件

yizhihongxing

要实现单一筛选、删除筛选条件,我们需要理解 Vue 组件之间的通信,具体的做法是使用一个共享状态管理筛选条件,当用户点击筛选或者删除筛选条件时,修改这个共享状态,并通知组件进行相应的更新。这个共享状态可以借助于 Vuex 状态管理器实现。

下面是实现这个功能的具体步骤:

第一步:创建 Vuex 状态管理器

声明一个对象作为 Vuex 的 state,这个 state 中用一个数组 filterList 来存储筛选条件,然后声明一些 mutation 和 action 来对这个状态进行修改和查询。

import Vue from 'vue';
import Vuex from 'vuex';

Vue.use(Vuex);

const store = new Vuex.Store({
  state: {
    filterList: [], // 存放筛选条件的数组
  },
  mutations: {
    // 添加筛选条件
    addFilter(state, newFilter) {
      state.filterList.push(newFilter);
    },
    // 删除筛选条件
    removeFilter(state, filterIndex) {
      state.filterList.splice(filterIndex, 1);
    },
  },
  actions: {
    // 同步添加筛选条件
    addFilterSync(context, newFilter) {
      context.commit('addFilter', newFilter);
    },
    // 同步删除筛选条件
    removeFilterSync(context, filterIndex) {
      context.commit('removeFilter', filterIndex);
    },
  },
});

export default store;

第二步:使用 Vuex 状态管理筛选条件

在需要使用筛选条件的组件里面,使用 Vue 的 computed 计算属性将筛选条件作为组件的一个属性,当状态管理器的 filterList 发生变化时,这个计算属性也会相应更新。当组件需要添加、删除筛选条件时,直接调用 actions 来修改状态即可。

<template>
  <div>
    <!-- 组件的模板代码 -->
  </div>
</template>

<script>
import { mapState, mapActions } from 'vuex';

export default {
  computed: {
    ...mapState(['filterList']),
    // 将筛选条件拼接成一个字符串
    filterString() {
      return this.filterList.join('; ');
    },
  },
  methods: {
    ...mapActions(['addFilterSync', 'removeFilterSync']),
    // 组件的其他方法
  }
};
</script>

<style>
/* 组件的样式 */
</style>

第三步:添加筛选条件

当需要添加筛选条件时,调用 addFilterSync action,将新的筛选条件传递给它。addFilterSync 会调用 addFilter mutation,将新的筛选条件添加到状态中。此时,关注计算属性 filterString 的变化即可。

this.addFilterSync('价格大于1000');

第四步:删除筛选条件

当需要删除某个筛选条件时,在计算属性 filterList 中查找与要删除的筛选条件相同的元素的下表,然后将这个下标作为参数调用 removeFilterSync action,removeFilterSync 会调用 removeFilter mutation,将这个筛选条件从状态中删除。此时,关注计算属性 filterString 的变化即可。

// 获取要删除的筛选条件的下标
const filterIndex = this.filterList.indexOf('价格大于1000');
this.removeFilterSync(filterIndex);

下面是一个完整的示例代码,这个示例中,用户可以通过输入框添加筛选条件,然后可以点击筛选条件的关闭按钮删除筛选条件。用户的筛选条件会显示在界面上。

<template>
  <div>
    <h1>筛选条件</h1>
    <p v-if="!filterList.length">暂无筛选条件</p>
    <ul>
      <li v-for="(filter, index) in filterList" :key="index">
        <span>{{ filter }}</span>
        <span class="close" @click="removeItem(index)">×</span>
      </li>
    </ul>
    <div>
      <input type="text" v-model="newFilter">
      <button @click="submit">添加</button>
    </div>
  </div>
</template>

<script>
import { mapState, mapActions } from 'vuex';

export default {
  computed: {
    ...mapState(['filterList']),
    // 将筛选条件拼接成一个字符串
    filterString() {
      return this.filterList.join('; ');
    },
  },
  methods: {
    ...mapActions(['addFilterSync', 'removeFilterSync']),
    // 添加筛选条件
    submit() {
      this.addFilterSync(this.newFilter);
      this.newFilter = '';
    },
    // 删除筛选条件
    removeItem(index) {
      this.removeFilterSync(index);
    },
  },

  data() {
    return {
      newFilter: '',
    };
  },
};
</script>

<style>
ul {
  list-style: none;
  padding: 0;
  margin: 0;
}

li {
  display: inline-block;
  margin-right: 10px;
  margin-bottom: 10px;
  padding: 2px 8px;
  border: 1px solid #eee;
  cursor: pointer;
}

li .close {
  margin-left: 5px;
  color: red;
  cursor: pointer;
}
</style>

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:vue实现单一筛选、删除筛选条件 - Python技术站

(0)
上一篇 2023年5月29日
下一篇 2023年5月29日

相关文章

  • 详解Vue使用命令行搭建单页面应用

    非常感谢您关注本网站,以下是对“详解Vue使用命令行搭建单页面应用”的完整攻略: 一、简介 Vue.js是一个流行的JavaScript框架,它使用MVVM模式来构建单页面应用程序。 而命令行是可以让我们方便地执行许多自动化任务的强大工具。接下来,我们将使用命令行来构建一个Vue.js单页面应用程序。 二、步骤 1. 安装Node.js和Vue.js 在开始…

    Vue 2023年5月28日
    00
  • element动态路由面包屑的实现示例

    下面是关于“element动态路由面包屑的实现示例”的详细攻略。 什么是动态路由面包屑? 在前端项目中,路由和面包屑导航都是非常重要的概念。路由决定了页面的展示,而面包屑则可以让用户更好地了解当前页面所在的位置和路径。而基于element组件库,可以实现动态路由面包屑,也就是根据用户的页面访问路径,自动生成面包屑导航,而不需要手动配置。 实现步骤 下面是el…

    Vue 2023年5月28日
    00
  • vue实现记事本小功能

    接下来我将为你讲解“Vue实现记事本小功能”的完整攻略。 第一步:搭建Vue项目 在开始Vue实现记事本小功能之前,我们需要先搭建一个Vue项目。如果你还没有安装Vue,请先进行安装: npm install vue 接着,我们可以使用Vue CLI快速搭建一个Vue项目。需要先全局安装Vue CLI: npm install -g @vue/cli 安装好…

    Vue 2023年5月28日
    00
  • vue 数组和对象不能直接赋值情况和解决方法(推荐)

    下面就来详细讲解一下“Vue 数组和对象不能直接赋值情况和解决方法”的完整攻略。 问题描述 在 Vue 中,我们经常需要对数据进行赋值操作。但是在进行数组或对象的赋值时,我们有时会遇到无法直接赋值的情况。例如: // 定义一个对象并初始化 let obj = { name: ‘John’, age: 25 } // 将一个新的对象赋值给 obj obj = …

    Vue 2023年5月28日
    00
  • vue项目中引入vue-datepicker插件的详解

    引入 vue-datepicker 插件,主要需要以下几个步骤: 1. 安装 vue-datepicker 插件 使用 npm 或 yarn 安装该插件: npm install vue-datepicker –save # 或 yarn add vue-datepicker 2. 在 main.js 中注册插件 在 main.js 文件中添加如下代码: …

    Vue 2023年5月29日
    00
  • webpack安装配置与常见使用过程详解(结合vue)

    一、安装配置 安装 Node.jsWebpack 基于 Node.js,需要先安装 Node.js。官网下载地址:https://nodejs.org/en/ 全局安装 webpack使用 npm 进行安装: npm install webpack -g 全局安装 webpack-cli 使用 npm 进行安装: npm install webpack-cl…

    Vue 2023年5月28日
    00
  • vue和小程序项目中使用iconfont的方法

    为了在Vue和小程序项目中使用iconfont,需要遵循以下步骤: 步骤1:注册iconfont账号并添加图标资源 首先需要注册一个iconfont账号,并创建一个新项目以添加所需的图标资源。在添加完成后,可以在账号中找到相应的图标链接。 步骤2:复制链接并引入项目 从iconfont的项目页面复制图标链接,并将其添加到Vue或小程序项目中的HTML文件中:…

    Vue 2023年5月27日
    00
  • Vue3.0静态文件存放路径与引用方式

    下面是关于Vue3.0静态文件存放路径与引用方式的完整攻略: 静态文件存放路径 在Vue3.0中,静态文件被默认存放在public文件夹中,该文件夹位于项目根目录下。在public文件夹中,你可以自由创建文件夹存放静态资源,例如images、css、js等文件夹。 值得注意的是,public文件夹中的文件可以被直接引用,例如<img src=”/ima…

    Vue 2023年5月28日
    00
合作推广
合作推广
分享本页
返回顶部