首页前端开发HTMLVuejs如何实现搜索匹配功能

Vuejs如何实现搜索匹配功能

时间2024-01-23 09:18:14发布访客分类HTML浏览786
导读:收集整理的这篇文章主要介绍了Vuejs如何实现搜索匹配功能,觉得挺不错的,现在分享给大家,也给大家做个参考。这次给大家带来Vuejs如何实现搜索匹配功能,Vuejs实现搜索匹配功能的注意事项有哪些,下面就是实战案例,一起来看一下。最近一直在...
收集整理的这篇文章主要介绍了Vuejs如何实现搜索匹配功能,觉得挺不错的,现在分享给大家,也给大家做个参考。这次给大家带来Vuejs如何实现搜索匹配功能,Vuejs实现搜索匹配功能的注意事项有哪些,下面就是实战案例,一起来看一下。

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

大概长这个样子:

数据都是假的

代码部分

(注意我引用的是本地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>
        p id="box">
          p class="search">
            input type="text" class="searchBox" v-model="searchVal">
            button class="btn">
    搜 索/button>
          /p>
          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>
        /p>
        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;
    ithis.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。

相信看了本文案例你已经掌握了方法,更多精彩请关注其它相关文章!

推荐阅读:

Vue.directive()的图文详解

使用javascript的模块加载器

以上就是Vuejs如何实现搜索匹配功能的详细内容,更多请关注其它相关文章!

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!

javascript

若转载请注明出处: Vuejs如何实现搜索匹配功能
本文地址: https://pptw.com/jishu/584012.html
在Vuejs里利用index对第一项添加class的方法 JS的表单传值与URL编码转换详解

游客 回复需填写必要信息