基于Vuejs的搜索匹配功能实现方法


Posted in Javascript onMarch 03, 2018

最近一直在看vue,查了很多资料,看了很多文档和博客,大概半知半解了,然后利用所理解的知识写了一个简单的搜索匹配功能。

大概长这个样子:

基于Vuejs的搜索匹配功能实现方法

数据都是假的

代码部分

(注意我引用的是本地vue.min.js文件,请注意文件路径。)

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>Vue测试2</title>
    <script type="text/javascript" src="vue.min.js"></script>
    <style type="text/css">
      *{
        padding: 0;
        margin: 0;
        font-size: 14px;
        font-family: "微软雅黑";
      }
      #box{
        width: 500px;
        height: auto;
        border: 1px solid #ccc;
        margin: 50px auto;
        padding: 10px;
      }
      .search{
        width: 480px;
        height: 100px;
        text-align: center;
      }
      .searchBox{
        width: 230px;
        height: 40px;
        outline: none;
        text-indent: 10px;
        margin-right: 20px;
      }
      .btn{
        width: 100px;
        height: 50px;
        cursor: pointer;
        font-size: 18px;
      }
      .goodsheet{
        width: 500px;
        height: auto;
        border: 1px solid #eee;
      }
      .goodsheet tr td,
      .goodsheet tr th{
        width: 33%;
        border: 1px solid #eee;
        padding: 5px 10px;
        text-align: left;
      }
      .goodsheet tr th span{
        background: #ff9900;
        padding: 0 6px;
        color: #fff;
        cursor: pointer;
      }
    </style>
  </head>
  <body>
    <div id="box">
      <div class="search">
        <input type="text" class="searchBox" v-model="searchVal">
        <button class="btn">搜 索</button>
      </div>
      <table class="goodsheet">
        <tr>
          <th>商品名</th>
          <th>单价
            <span @click="orderFn('price', false)">↑</span>
            <span @click="orderFn('price', true)">↓</span>
          </th>
          <th>销量
            <span @click="orderFn('sales', false)">↑</span>
            <span @click="orderFn('sales', true)">↓</span>
          </th>
        </tr>
        <tr v-for='(item, key) in list'>
          <td>{{item.name}}</td>
          <td>{{item.price}}</td>
          <td>{{item.sales}}万</td>
        </tr>
      </table>
    </div>
    <script type="text/javascript">
      var myVueTest = new Vue({
        el:'#box',
        data:{
          goodsList:[
            //假数据
            {name:"三星Galaxy Note8",price:5200,sales:2.6},
            {name:"iphone5s",price:2500,sales:2.2},
            {name:"iphone6",price:2800,sales:1.6},
            {name:"iphone6s",price:3200,sales:2.9},
            {name:"iphone7",price:3800,sales:12.6},
            {name:"iphone7plus",price:4200,sales:2.1},
            {name:"iphone8",price:5500,sales:10.6},
            {name:"华为",price:4600,sales:7.6},
            {name:"小米",price:1200,sales:32.6},
            {name:"OPPOR11",price:3000,sales:1.2},
            {name:"vivoX20",price:3250,sales:2.9}
          ],
          searchVal:'',  //默认输入为空
          letter:'',    //默认不排序
          original:false  //默认从小到大排列
        },
        methods:{
          orderFn(letter,original){
            this.letter = letter;    //排序字段 price or sales 
            this.original = original;  //排序方式 up or down
          }
        },
        //通过计算属性过滤数据
        computed:{
          list: function(){
            var _this = this;
            //逻辑-->根据input的value值筛选goodsList中的数据
            var arrByZM = [];//声明一个空数组来存放数据
            for (var i=0;i<this.goodsList.length;i++){
              //for循环数据中的每一项(根据name值)
              if(this.goodsList[i].name.search(this.searchVal) != -1){
                //判断输入框中的值是否可以匹配到数据,如果匹配成功
                arrByZM.push(this.goodsList[i]);
                //向空数组中添加数据
              }
            }
            //逻辑-->升序降序排列 false: 默认从小到大 true:默认从大到小
            //判断,如果要letter不为空,说明要进行排序
            if(this.letter != ''){
              arrByZM.sort(function( a , b){
                if(_this.original){
                  return b[_this.letter] - a[_this.letter];
                }else{
                  return a[_this.letter] - b[_this.letter];
                }
              });
            }
            //一定要记得返回筛选后的数据
            return arrByZM;
          }
        }
      });
    </script>
  </body>
</html>

其实核心算法还是用原生JS写的,vue提供了很强大的数据绑定方法,但是如果只知道vue这个框架,没有自己的核心思想的话,还是没多大用处的,所以作者在官方文档里面说希望我们是有一定JS基础的。我还是觉得前端框架再多,最厉害的永远是原生JS。

以上这篇基于Vuejs的搜索匹配功能实现方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
js下判断 iframe 是否加载完成的完美方法
Oct 26 Javascript
自定义函数实现IE7与IE8不兼容js中trim函数的问题
Feb 03 Javascript
JS实现两表格里数据来回转移的方法
May 28 Javascript
angular route中使用resolve在uglify压缩后问题解决
Sep 21 Javascript
xmlplus组件设计系列之列表(4)
Apr 26 Javascript
JSON在Javascript中的使用(eval和JSON.parse的区别)详细解析
Sep 05 Javascript
利用纯js + transition动画实现移动端web轮播图详解
Sep 10 Javascript
webstorm和.vue中es6语法报错的解决方法
May 08 Javascript
node.js中express模块创建服务器和http模块客户端发请求
Mar 06 Javascript
基于Vue实现平滑过渡的拖拽排序功能
Jun 12 Javascript
微信小程序实现导航栏和内容上下联动功能代码
Jun 29 Javascript
JavaScript实例 ODO List分析
Jan 22 Javascript
vue.js select下拉框绑定和取值方法
Mar 03 #Javascript
Vuejs在v-for中,利用index来对第一项添加class的方法
Mar 03 #Javascript
基于vue v-for 循环复选框-默认勾选第一个的实现方法
Mar 03 #Javascript
JS表单传值和URL编码转换
Mar 03 #Javascript
jQuery实现左右滑动的toggle方法
Mar 03 #jQuery
vue中实现移动端的scroll滚动方法
Mar 03 #Javascript
vue.js-div滚动条隐藏但有滚动效果的实现方法
Mar 03 #Javascript
You might like
老生常谈PHP中的数据结构:DS扩展
2017/07/17 PHP
初试jQuery EasyUI 使用介绍
2010/04/01 Javascript
JavaScript判断DOM何时加载完毕的技巧
2012/11/11 Javascript
删除select中所有option选项jquery代码
2013/08/12 Javascript
javascript设计模式--策略模式之输入验证
2015/11/27 Javascript
jQuery插件EasyUI校验规则 validatebox验证框
2015/11/29 Javascript
JS中正则表达式只有3种匹配模式(没有单行模式)详解
2016/07/28 Javascript
关于动态执行代码(js的Eval)实例详解
2016/08/15 Javascript
利用node.js实现反向代理的方法详解
2017/07/24 Javascript
vue 每次渲染完页面后div的滚动条保持在最底部的方法
2018/03/17 Javascript
Vue 将后台传过来的带html字段的字符串转换为 HTML
2018/03/29 Javascript
微信小程序商品详情页的底部弹出框效果
2020/11/16 Javascript
vuejs+element UI table表格中实现禁用部分复选框的方法
2019/09/20 Javascript
javascript实现图片轮换动作方法
2020/08/07 Javascript
简单介绍Python中的len()函数的使用
2015/04/07 Python
Python爬虫天气预报实例详解(小白入门)
2018/01/24 Python
python 利用文件锁单例执行脚本的方法
2019/02/19 Python
python RC4加密操作示例【测试可用】
2019/09/26 Python
python 两个数据库postgresql对比
2019/10/21 Python
python将时分秒转换成秒的实例
2019/12/07 Python
Python Flask框架实现简单加法工具过程解析
2020/06/03 Python
PyCharm Community安装与配置的详细教程
2020/11/24 Python
AmazeUi Tree(树形结构) 应用小结
2020/08/17 HTML / CSS
美国著名的婴儿学步鞋老品牌:Robeez
2016/08/20 全球购物
洛佩桑酒店官方网站:Lopesan Hotels
2019/04/15 全球购物
学生个人求职自荐信格式
2013/09/23 职场文书
银行营业厅大堂经理岗位职责
2014/01/06 职场文书
网上卖盒饭创业计划书
2014/01/26 职场文书
社区食品安全实施方案
2014/03/28 职场文书
文明礼仪标语
2014/06/13 职场文书
2014年政务公开工作总结
2014/12/09 职场文书
工伤劳动仲裁代理词
2015/05/25 职场文书
2015年思想品德教学工作总结
2015/07/22 职场文书
干货:如何写好工作总结报告!
2019/05/10 职场文书
python 提取html文本的方法
2021/05/20 Python
php将xml转化对象的实例详解
2021/11/17 PHP