Vue-列表过滤排序

列表过滤

基础环境

  • 数据
javascript 复制代码
persons: [
   { id: "001", name: "刘德华", age: 19 },
   { id: "002", name: "马德华", age: 20 },
   { id: "003", name: "李小龙", age: 21 },
   { id: "004", name: "释小龙", age: 18 },
 ]
  • 根据 名称模糊过滤

监听属性

  • 代码
javascript 复制代码
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <title>列表过滤</title>
    <!--  引入Vue  -->
    <script type="text/javascript" src="../js/vue.js"></script>
    <style>
      .base {
        padding: 5px;
        height: 100px;
      }
    </style>
  </head>
  <body>
    <div id="root">
      <h1>列表过滤</h1>
      <div>
        <h2>数组</h2>
        <input type="text" placeholder="请输入名称" v-model="filterName" />
        <ul>
          <!-- :key="item.id" :key="index" -->
          <li v-for="(item,index) in filterPersons" :key="item.id">
            {{index}}-{{item.id}}-{{item.name}}
          </li>
        </ul>
      </div>
    </div>
  </body>
  <script type="text/javascript">
    Vue.config.productionTip = false; // 阻止vue在启动是生成生产提示
    const vm = new Vue({
      el: "#root",
      data: {
        name: "Vue 扛把子",
        persons: [
          { id: "001", name: "刘德华", age: 19 },
          { id: "002", name: "马德华", age: 20 },
          { id: "003", name: "李小龙", age: 21 },
          { id: "004", name: "释小龙", age: 18 },
        ],
        filterName: "",
        filterPersons: [],
      },

      methods: {},
      watch: {
        filterName: {
          immediate: true,
          handler(newValue) {
            onsole.log("filterName new value => " + newValue);
            if (newValue === "") {
              this.filterPersons = this.persons;
            } else {
              this.filterPersons = this.persons.filter((item) => {
                return item.name.indexOf(newValue) > -1;
              });
            }
          },
        },
      },
    });
  </script>
</html>
  • 效果

初始化

搜索 龙

清空

计算属性

  • 代码
javascript 复制代码
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <title>列表过滤</title>
    <!--  引入Vue  -->
    <script type="text/javascript" src="../js/vue.js"></script>
    <style>
      .base {
        padding: 5px;
        height: 100px;
      }
    </style>
  </head>
  <body>
    <div id="root">
      <h1>列表过滤</h1>
      <div>
        <h2>数组</h2>
        <input type="text" placeholder="请输入名称" v-model="filterName" />
        <ul>
          <!-- :key="item.id" :key="index" -->
          <li v-for="(item,index) in filterPersons" :key="item.id">
            {{index}}-{{item.id}}-{{item.name}}
          </li>
        </ul>
      </div>
    </div>
  </body>
  <script type="text/javascript">
    Vue.config.productionTip = false; // 阻止vue在启动是生成生产提示
    const vm = new Vue({
      el: "#root",
      data: {
        name: "Vue 扛把子",
        persons: [
          { id: "001", name: "刘德华", age: 18 },
          { id: "002", name: "马德华", age: 20 },
          { id: "003", name: "李小龙", age: 20 },
          { id: "004", name: "释小龙", age: 18 },
        ],
        filterName: ""
      },
      computed: {
        filterPersons(){
            console.log(" computed filterName value => " + this.filterName); 
            return this.persons.filter((item) => {
              return item.name.indexOf( this.filterName) > -1;
            });
        }
      },

      methods: {},
      watch: {
      },
    });
  </script>
</html>
  • 效果

初始化

搜索 华

清空

列表排序

基础环境

  • 数据
javascript 复制代码
persons: [
   { id: "001", name: "刘德华", age: 19 },
   { id: "002", name: "马德华", age: 20 },
   { id: "003", name: "李小龙", age: 21 },
   { id: "004", name: "释小龙", age: 18 },
 ]
  • 根据 年龄排序

计算属性

  • 代码
javascript 复制代码
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <title>列表过滤</title>
    <!--  引入Vue  -->
    <script type="text/javascript" src="../js/vue.js"></script>
    <style>
      .base {
        padding: 5px;
        height: 100px;
      }
    </style>
  </head>
  <body>
    <div id="root">
      <h1>列表过滤</h1>
      <div>
        <h2>数组</h2>
        <input type="text" placeholder="请输入名称" v-model="filterName" />
        <button @click="sortType='desc'">年龄逆序</button>
        <button @click="sortType='asc'">年龄正序</button>
        <button @click="sortType=''">年龄原序</button>
        <ul>
          <!-- :key="item.id" :key="index" -->
          <li v-for="(item,index) in filterPersons" :key="item.id">
            {{index}}-{{item.id}}-{{item.name}}-{{item.age}}
          </li>
        </ul>
      </div>
    </div>
  </body>
  <script type="text/javascript">
    Vue.config.productionTip = false; // 阻止vue在启动是生成生产提示
    const vm = new Vue({
      el: "#root",
      data: {
        name: "Vue 扛把子",
        persons: [
          { id: "001", name: "刘德华", age: 19 },
          { id: "002", name: "马德华", age: 20 },
          { id: "003", name: "李小龙", age: 21 },
          { id: "004", name: "释小龙", age: 18 },
        ],
        filterName: "",
        sortType: ""
      },
      computed: {
        filterPersons() {
          console.log("computed filterName value => " + this.filterName);
          const arr = this.persons.filter((item) => {
            return item.name.indexOf(this.filterName) > -1;
          });
          if (this.sortType !== "") {
            console.log("computed sortType value => " + this.sortType);
            arr.sort((v1, v2) => {
              return this.sortType === "asc" ? v1.age - v2.age : v2.age - v1.age;
            });
          }
          return arr;
        },
      },

      methods: {},
      watch: {},
    });
  </script>
</html>
  • 效果

初始化 不排序

年龄逆序

年龄正序

年龄原序

过滤 华 & 年龄正序

过滤 华 & 年龄逆序

相关推荐
志尊宝3 天前
Vue3 零基础每日笔记(055):组件里正确使用 store——storeToRefs 解构与 $patch 批量修改
笔记·vue·html·前端开发·软件开发
yzy853 天前
Vue中下载或打开文件的JavaScript方法
前端·javascript·vue
溪语流沙5 天前
Django + Vue电商项目第001讲:开篇|注册登录加增删改查,那不是电商
redis·python·mysql·docker·typescript·django·vue
程序员阿黄5 天前
基于 Django 与 Vue 3 的智能实验室预约系统设计与实现
后端·python·mysql·django·vue·毕设
.Hypocritical.5 天前
Vue CLI(vue-cli)和 Vite 超详细对比
vue
志尊宝6 天前
Vue3 零基础每日笔记(040):Vite 创建 Vue3 + TS 项目——企业标配从这一篇开始
笔记·vue·html·前端开发·软件开发
凤城老人6 天前
从零手写开源私有云盘|Flask+Vue3+Electron全栈网盘,单容器一键部署
python·docker·electron·vue
球球不吃虾6 天前
Nuxt在使用过程中的一些小总结(二)
前端·vue·nuxt
志尊宝6 天前
Vue3 零基础每日笔记(038):亲手封装 useDebounceFn 与 useThrottleFn——高频事件的流量阀
前端·javascript·vue·html·vue3
愛芳芳7 天前
基于 Electron + Vue3 的仿 PC 微信客户端项目实战
前端·javascript·css·elementui·typescript·electron·vue