基于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 相关文章推荐
javascript之ESC(第二类混淆)
May 06 Javascript
Node.js编程中客户端Session的使用详解
Jun 23 Javascript
基于jQuery Bar Indicator 插件实现进度条展示效果
Sep 30 Javascript
Node.js中文件操作模块File System的详细介绍
Jan 05 Javascript
微信小程序 商城开发(ecshop )简单实例
Apr 07 Javascript
vue.js实例对象+组件树的详细介绍
Oct 20 Javascript
Vuejs 2.0 子组件访问/调用父组件的方法(示例代码)
Feb 08 Javascript
Vue2.0 http请求以及loading展示实例
Mar 06 Javascript
详解vue 不同环境配置不同的打包命令
Apr 07 Javascript
vue中的inject学习教程
Apr 24 Javascript
layui数据表格重载实现往后台传参
Nov 15 Javascript
Node.js API详解之 querystring用法实例分析
Apr 29 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与mysql建立连接并执行SQL语句的代码
2011/07/04 PHP
使用PHP强制下载PDF文件示例
2014/01/17 PHP
PHP模板引擎Smarty内建函数详解
2016/04/11 PHP
thinkPHP框架可添加js事件的分页类customPage.class.php完整实例
2017/03/16 PHP
PHP判断一个变量是否为整数、正整数的方法示例
2019/09/11 PHP
php测试kafka项目示例
2020/02/06 PHP
javascript 获取页面的高度及滚动条的位置的代码
2010/05/06 Javascript
jQuery之按钮组件的深入解析
2013/06/19 Javascript
JavaScript实现动态创建CSS样式规则方案
2014/09/06 Javascript
js实例属性和原型属性示例详解
2014/11/23 Javascript
jquery实现对联广告的方法
2015/02/05 Javascript
js数组依据下标删除元素
2015/04/14 Javascript
跟我学习javascript的垃圾回收机制与内存管理
2015/11/23 Javascript
JS+HTML5手机开发之滚动和惯性缓动实现方法分析
2016/06/12 Javascript
ES6概念 Symbol.keyFor()方法
2016/12/25 Javascript
Node.js获取前端ajax提交的request信息
2017/02/20 Javascript
微信小程序 侧滑删除(左滑删除)
2017/05/23 Javascript
React Native使用百度Echarts显示图表的示例代码
2017/11/07 Javascript
动态Axios的配置步骤详解
2018/01/12 Javascript
vue数据控制视图源码解析
2018/03/28 Javascript
layerUI下的绑定事件实例代码
2018/08/17 Javascript
jQuery无冲突模式详解
2019/01/17 jQuery
vue实现移动端返回顶部
2020/10/12 Javascript
vue+element UI实现树形表格
2020/12/29 Vue.js
Python实现命令行通讯录实例教程
2016/08/18 Python
python获取list下标及其值的简单方法
2016/09/12 Python
Python+Selenium自动化实现分页(pagination)处理
2017/03/31 Python
基于python的字节编译详解
2017/09/20 Python
调试Django时打印SQL语句的日志代码实例
2019/09/12 Python
python和c语言哪个更适合初学者
2020/06/22 Python
露营世界:Camping World
2017/02/02 全球购物
SQL SERVER面试资料
2013/03/30 面试题
商务经理岗位职责
2014/08/03 职场文书
党员四风剖析材料
2014/08/27 职场文书
2014银行领导班子四风对照检查材料思想汇报
2014/09/25 职场文书
人民币符号
2022/02/17 杂记