基于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 相关文章推荐
DOM 中的事件处理介绍
Jan 18 Javascript
Jqgrid表格随窗口大小改变而改变的简单实例
Dec 28 Javascript
ParseInt函数参数设置介绍
Jan 02 Javascript
jQuery学习笔记之创建DOM元素
Jan 19 Javascript
jquery滚动特效集锦
Jun 03 Javascript
jQuery实现为图片添加镜头放大效果的方法
Jun 25 Javascript
简单实现异步编程promise模式
Jul 31 Javascript
每日十条JavaScript经验技巧(一)
Jun 23 Javascript
全面解析JS字符串和正则表达式中的match、replace、exec等函数
Jul 01 Javascript
JS与jQuery实现隔行变色的方法
Sep 09 Javascript
微信小程序 天气预报开发实例代码源码
Jan 20 Javascript
利用 spin.js 生成等待效果(js 等待效果)
Jun 25 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在线生成二维码(google api)的实现代码详解
2013/06/04 PHP
PHP扩展迁移为PHP7扩展兼容性问题记录
2016/02/15 PHP
Joomla开启SEF的方法
2016/05/04 PHP
ArrayList类(增强版)
2007/04/04 Javascript
CSS3,HTML5和jQuery搜索框集锦
2014/12/02 Javascript
jQuery+jRange实现滑动选取数值范围特效
2015/03/14 Javascript
jQuery实现鼠标经过事件的延时处理效果
2020/08/20 Javascript
jQuery学习笔记之回调函数
2016/08/15 Javascript
微信小程序 网络API 上传、下载详解
2016/11/09 Javascript
Vue中保存用户登录状态实例代码
2017/06/07 Javascript
React 子组件向父组件传值的方法
2017/07/24 Javascript
Vue.js搭建移动端购物车界面
2020/06/28 Javascript
webpack打包node.js后端项目的方法
2018/03/10 Javascript
QQ跳转支付宝并自动领红包脚本(最新)
2018/06/22 Javascript
Vue 实现前端权限控制的示例代码
2019/07/09 Javascript
layer.js open 隐藏滚动条的例子
2019/09/05 Javascript
Python 字符串中的字符倒转
2008/09/06 Python
Python实现的生成自我描述脚本分享(很有意思的程序)
2014/07/18 Python
python传递参数方式小结
2015/04/17 Python
python实现批量下载新浪博客的方法
2015/06/15 Python
Python之列表的插入&amp;替换修改方法
2018/06/28 Python
Python pip替换为阿里源的方法步骤
2019/07/02 Python
python实现ip代理池功能示例
2019/07/05 Python
使用python爬取抖音视频列表信息
2019/07/15 Python
Python队列、进程间通信、线程案例
2019/10/25 Python
Python中类似于jquery的pyquery库用法分析
2019/12/02 Python
css3动画 小球滚动 js控制动画暂停
2019/11/29 HTML / CSS
构造器Constructor是否可被override?
2013/08/06 面试题
JDBC操作数据库的基本流程是什么
2014/10/28 面试题
初三学习决心书
2014/03/11 职场文书
婚庆司仪主持词
2014/03/15 职场文书
教师作风建设剖析材料
2014/10/11 职场文书
教学质量月活动总结
2015/05/11 职场文书
python3.9之你应该知道的新特性详解
2021/04/29 Python
使用 CSS 轻松实现一些高频出现的奇形怪状按钮
2021/12/06 HTML / CSS
springboot新建项目pom.xml文件第一行报错的解决
2022/01/18 Java/Android