vue实现姓名筛选

功能:输入框中输入名字中的一个字可进行筛选,点击男女也可进行筛选

在这里插入图片描述

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
    <link rel="stylesheet" href="./index.css">
</head>
<body>
    <div id="app">
            <div class="control">
                <input type="text" class="search" v-model = "filterText">
                <div>
                     <span 
                        class="option"
                        v-for = "(option,index) in controlOptions"
                        :class = "{
                            'active' : optionActive[index]
                        }"
                        @click = "filterbySex(index,option)"

                     >
                       {{ option }}
                    </span>
                </div>
            </div>
                <ul>
                    <li class="person"
                     v-for = "person in personList"
                     :key = "person.id"
                    >
                        <div class="avatar"> 
                            <img :src="person.src" :alt="person.des">
                        </div>
                        <div class="content">
                            <span class="name">{{ person.name }}</span>
                            <span class="des">{{ person.des }}</span>
                        </div>
                    </li>
                </ul>
            </div>
    <script>

        const vm = new Vue({
            el:'#app',
            data:{
                controlOptions:['MALE','FEMALE','ALL'],
                optionActive:[false,false,true],
                filterText:'',
                addClassFlag:false,
                sex:['f','m'],

                personArr: [
  { 
    name: '王俊凯', 
    src: 'https://ss0.bdstatic.com/70cFvHSh_Q1YnxGkpoWK1HF6hhy/it/u=4005587090,2408158268&fm=26&gp=0.jpg', 
    des: '颈椎不好', 
    sex: 'f', 
    id: '056482' 
  },
  { 
    name: '刘欣欣', 
    src: 'https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1571915784984&di=a0056fd06188e87b922c60878e5ce6e2&imgtype=0&src=http%3A%2F%2Fpic.51yuansu.com%2Fpic3%2Fcover%2F03%2F79%2F64%2F5c05df1faf3b7_610.jpg', 
    des: '我是谁', 
    sex: 'm', 
    id: '157894' 
  },
  { 
    name: '李泽辰', 
    src: 'https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1571915803971&di=47dc968f55b16a461de3e8f25bdf8600&imgtype=0&src=http%3A%2F%2Fimg.duoziwang.com%2F2016%2F11%2F27%2F190426198344.jpg', des: '我长得很好看', 
    sex: 'f', 
    id: '2849245' 
  },
  { 
    name: '卡卡', 
    src: 'https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1571915748758&di=5be825da4d37bcc21959946c101d5609&imgtype=0&src=http%3A%2F%2Fb-ssl.duitang.com%2Fuploads%2Fitem%2F201707%2F19%2F20170719211350_4PnBt.jpeg', 
    des: '你没有见过陌生的脸', 
    sex: 'f', 
    id: '348515' 
  },
  { 
    name: '静静', 
    src: 'https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1571915762633&di=49517ca62ecddb638cdfb2158a64e39a&imgtype=0&src=http%3A%2F%2Fb-ssl.duitang.com%2Fuploads%2Fitem%2F201702%2F05%2F20170205222154_WLdJS.jpeg', 
    des: '瓜皮刘', 
    sex: 'm', 
    id: '478454'
  }
],
            },
            methods:{
                filterbySex(index,option){
                    if(this.optionActive[index]){
                        return;
                    }
                    for(let i = 0;i<this.optionActive.length;i++){
                        this.optionActive[i] = false;
                    }
                    this.optionActive.splice(index,1,true)
                    this.sex.length = 0;
                    switch(option){
                        case 'MALE':
                        this.sex.push('m');
                        break;
                        case 'FEMALE':
                        this.sex.push('f');
                        break;
                        case 'ALL':
                        this.sex.push('m','f');
                    }

                }
            },
    computed:{
    personList(){
        // const personArr = this.personArr;
        // const filterText = this.filterText;
        const{ personArr, filterText,sex} = this;
        return personArr.filter(item => item.name.includes(filterText) && sex.includes(item.sex))
            // return true
      }
}
 })
    </script>
    
</body>
</html>
* {
    margin: 0;
    padding: 0;
    list-style: none;
    font-size: 14px;
  }
  #app {
    width: 500px;
    padding: 10px;;
    margin: 30px auto;
  }
  
  .control {
    display: flex;
    justify-content: space-between;
    align-items: center;
    margin-bottom: 10px;
  }
  
  .control .search {
    display: inline-block;
    width: 300px;
    height: 25px;
    padding-left: 10px;
    border-radius: 4px;
    border: 1px solid #ccc;
  }
  
  .control .option {
    color: #3e86f4;
    font-size: 14px;
    margin-left: 10px;
    padding: 0 5px;
    border-radius: 4px;
    cursor: pointer;
  }
  
  .control .option.active {
    color: #fff;
    background-color: #3e86f4;
  }
  
  
  .person {
    display: flex;
    align-items: center;
    padding-bottom: 10px;
    padding-top: 10px;
    border-bottom: 1px solid #ccc;
  }
  
  .avatar {
    margin-right: 10px;
    vertical-align: middle;
  }
  
  .avatar img {
    width: 50px;
    height: 50px;
  }
  
  .content {
    display: flex;
    flex-direction: column;
  }
  
  .content .des {
    color: #aaa;
    font-size: 10px;
    margin-top: 5px;
  }
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue前端实现筛选功能可以通过以下步骤实现: 1. 在Vue组件中定义一个data对象,用于存储筛选条件和筛选结果。 ```javascript data() { return { filter: { name: '', age: '', gender: '' }, filteredData: [] } } ``` 2. 在模板中添加筛选条件输入框和按钮,并绑定到data中的属性。 ```html <div> <label>姓名:</label> <input type="text" v-model="filter.name"> </div> <div> <label>年龄:</label> <input type="number" v-model="filter.age"> </div> <div> <label>性别:</label> <select v-model="filter.gender"> <option value="">请选择</option> <option value="male">男</option> <option value="female">女</option> </select> </div> <button @click="filterData">筛选</button> ``` 3. 在Vue组件的方法中实现筛选逻辑,根据筛选条件过滤数据。 ```javascript methods: { filterData() { this.filteredData = this.data.filter(item => { let valid = true; if (this.filter.name && item.name.indexOf(this.filter.name) === -1) { valid = false; } if (this.filter.age && item.age !== Number(this.filter.age)) { valid = false; } if (this.filter.gender && item.gender !== this.filter.gender) { valid = false; } return valid; }); } } ``` 4. 在模板中展示筛选结果。 ```html <ul> <li v-for="item in filteredData" :key="item.id"> {{ item.name }} - {{ item.age }} - {{ item.gender }} </li> </ul> ``` 完整代码如下: ```html <template> <div> <div> <label>姓名:</label> <input type="text" v-model="filter.name"> </div> <div> <label>年龄:</label> <input type="number" v-model="filter.age"> </div> <div> <label>性别:</label> <select v-model="filter.gender"> <option value="">请选择</option> <option value="male">男</option> <option value="female">女</option> </select> </div> <button @click="filterData">筛选</button> <ul> <li v-for="item in filteredData" :key="item.id"> {{ item.name }} - {{ item.age }} - {{ item.gender }} </li> </ul> </div> </template> <script> export default { data() { return { data: [ { id: 1, name: '张三', age: 20, gender: 'male' }, { id: 2, name: '李四', age: 25, gender: 'male' }, { id: 3, name: '王五', age: 30, gender: 'female' }, { id: 4, name: '赵六', age: 35, gender: 'male' }, { id: 5, name: '钱七', age: 40, gender: 'female' }, ], filter: { name: '', age: '', gender: '' }, filteredData: [] } }, methods: { filterData() { this.filteredData = this.data.filter(item => { let valid = true; if (this.filter.name && item.name.indexOf(this.filter.name) === -1) { valid = false; } if (this.filter.age && item.age !== Number(this.filter.age)) { valid = false; } if (this.filter.gender && item.gender !== this.filter.gender) { valid = false; } return valid; }); } } } </script> ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值