国产99久久精品_欧美日本韩国一区二区_激情小说综合网_欧美一级二级视频_午夜av电影_日本久久精品视频

最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
當前位置: 首頁 - 科技 - 知識百科 - 正文

Vue實現搜索結果高亮顯示關鍵字

來源:懂視網 責編:小OO 時間:2020-11-27 21:55:57
文檔

Vue實現搜索結果高亮顯示關鍵字

本文實例為大家分享了Vue實現搜索結果高亮顯示關鍵字的具體代碼,供大家參考,具體內容如下:1.需要解決的問題 父組件將搜索的字段傳到子組件 子組件接受數據,正則匹配,并替換字段。2.具體代碼;父組件代碼;
推薦度:
導讀本文實例為大家分享了Vue實現搜索結果高亮顯示關鍵字的具體代碼,供大家參考,具體內容如下:1.需要解決的問題 父組件將搜索的字段傳到子組件 子組件接受數據,正則匹配,并替換字段。2.具體代碼;父組件代碼;

本文實例為大家分享了Vue實現搜索結果高亮顯示關鍵字的具體代碼,供大家參考,具體內容如下

1. 需要解決的問題

  • 父組件將搜索的字段傳到子組件
  • 子組件接受數據,正則匹配,并替換字段
  • 2. 具體代碼

    父組件代碼

    <template>
     <div>
     <div v-if="showMe">
     <div class="re_search">
     <svg @click="$router.go(-1)">
     <use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#arrow-left.6f6409e" rel="external nofollow" ></use>
     </svg>
     <input type="search" v-model="search_text" class="v-md" placeholder="請輸入商品名稱" @keydown.enter="search_method">
     </div>
     <OneBusiness v-for="(item, n) in search_res" :key="n" :item="item" :search_text="search_text"></OneBusiness>
     </div>
     <!--<!– 撐開Fixednav擋住的位置 –>-->
     <div class="space"></div>
     <!-- 固定導航欄 -->
     </div>
    </template>
    
    <script>
    import { mapGetters } from 'vuex';
    import OneBusiness from './small_components/One_business';
    import {getSearchData} from 'src/service/getData'
    
    
    export default {
     name: 'search',
     data () {
     return {
     showMe: false,
     search_text: '', // 搜索框內容
     search_res: [] // 搜索結果
     };
     },
     mounted () {
     this.$store.dispatch('setLoading', true);
     // 模擬加載
     var time = Math.floor(Math.random() * 2000);
     console.log('模擬加載用時' + time);
     setTimeout(() => {
     this.$store.dispatch('setLoading', false);
     this.showMe = true;
     }, time);
     this.search_method();
     },
     computed: {
     ...mapGetters([
     'getFalseBussinessbrief' // 商家簡略信息
     ])
     },
     methods: {
     async search_method () {
    
     var mainWord = this.$route.params.keyword;
     if (this.search_text !== '' && this.search_text !== this.$route.params.keyword) {
     mainWord = this.search_text;
     }
     this.search_text = mainWord;
     this.search_res = (await getSearchData(this.search_text)).obj.results;
     console.log(this.search_res);
     }
     },
     components: {
     OneBusiness
     }
    };
    </script>
    
    <style lang="less" scoped>
    .re_search{
     background:#0096ff;
     line-height:0;
     padding: .2rem;
     svg{
     width:.6rem;
     height:.6rem;
     }
     input[type="search"]{
     display:inline-block;
     height:.9rem;
     width:8rem;
     outline: none;
     border: none;
     border-radius:.45rem;
     background:#f2f2f2;
     box-sizing: border-box;
     padding: 0 .5rem;
     font-size:.4rem;
     }
    }
    </style>

    子組件代碼

    <template>
     <!-- 列表單個商家 -->
     <section class="tj_business" >
     <section class="one_business clear">
     <div class="business_img">
     <img src="../../images/guozhao.png" alt="">
     </div>
     <div class="business_info">
     <section class="business_name clear">
     <router-link :to="'/business/' + item.classNum">
     <h3 class="fl ell"><span v-if="item.className">大類</span>第{{item.classNum}}類{{ item.className }}</h3>
     </router-link>
     <div class="name_icon fr">
     <div class="code_num fr">
     <svg @click="add_cart(item.id)" style=" width: .5rem; height: .5rem;">
     <use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#cart-minus" rel="external nofollow" ></use>
     </svg>
     </div>
     </div>
     </section>
     <section class="business_code clear">
     <div class="code_num fl">
     <!--<svg class="v-md">-->
     <!--<use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#rating-star" rel="external nofollow" ></use>-->
     <!--</svg>-->
     <span class="v-md">【{{item.parentNum}}組】{{ item.groupName }}</span>
     </div>
     <div class="code_icon fr">
     </div>
     </section>
     <section class="business_other clear">
     <div class="other_price fl">
     <span class="com_gray1" v-html="ruleTitle"></span>
     <span>/</span>
     <span class="com_gray1">{{ item.number }}</span>
     </div>
     <div class="other_dis fr">
     </div>
     </section>
     </div>
     </section>
    
     </section>
    
    </template>
    
    <script>
     import {
     addMyshopcart,
     } from 'src/service/getData'
    
     export default {
     name: 'one_business',
     props: {
     search_text:String,
     item:{}
     },
     data () {
     return {
     msg: '1'
    
     };
     },
     mounted () {
    
     },
     computed: {
     isLogin () {
     return this.$store.getters.getLogin;
     },
     ruleTitle() {
     let titleString = this.item.gname;
     if (!titleString) {
     return '';
     }
     if (this.search_text && this.search_text.length > 0) {
     // 匹配關鍵字正則
     let replaceReg = new RegExp(this.search_text, 'g');
     // 高亮替換v-html值
     let replaceString = '<span class="search-text">' + this.search_text + '</span>';
     // 開始替換
     titleString = titleString.replace(replaceReg, replaceString);
     }
     return titleString;
     }
     },
     methods: {
     async add_cart(id){
     if (!this.isLogin) {
     this.$router.replace('/login');
     } else {
     var userId = this.$store.getters.getuname;
     var result = await addMyshopcart(id, userId)
     console.log(result.resMsg)
    
     if (result.res === 1) {
     this.$router.replace('/ShopCart/' + userId);
     } else {
     alert(result.resMsg)
     }
     }
     }
     }
    
     };
    </script>
    
    <!-- Add "scoped" attribute to limit CSS to this component only -->
    <style lang="less">
     @baseBlue: #0096ff;
     @com_gray1: #666;
     @com_gray2: #999;
    .search-text{
     color: #52250a;
     background: #ffd930;
     font-size: .2rem;
     padding: .02rem;
     border-radius: 2px;
     vertical-align: top;
     margin-right: .04rem;
    }
    
    
     .com_gray1 {
     color: @com_gray1;
     }
    
     .com_gray2 {
     color: @com_gray2;
     }
    
     .com_blue {
     color: @baseBlue;
     }
    
     /* 單個商家 */
     .one_business {
     background: #fff;
    
     .business_img {
     width: 1.6rem;
     height: 1.6rem;
     padding: 0.4rem;
     float: left;
     img {
     width: 100%;
     height: 100%;
     }
     }
     .business_info {
     float: right;
     width: 7.4rem;
     height: 1.6rem;
     padding: 0.4rem .2rem .4rem 0;
     .business_name {
     font-size: .35rem;
     line-height: .45rem;
     vertical-align: top;
     h3 {
     width: 5rem;
     display: inline-block;
     /*span {*/
     /*color: #52250a;*/
     /*background: #ffd930;*/
     /*font-size: .2rem;*/
     /*padding: .02rem;*/
     /*border-radius: 2px;*/
     /*vertical-align: top;*/
     /*margin-right: .04rem;*/
     /*}*/
     }
     .bzp {
     width: .3rem;
     height: .3rem;
     font-size: .26rem;
     text-align: center;
     line-height: .3rem;
     display: inline-block;
     color: @com_gray2;
     border: 0.01rem solid #ddd;
     padding: 0.01rem;
     border-radius: 3px;
     i {
     font-style: normal;
     }
    
     }
     }
     .business_code, .business_other {
     font-size: .25rem;
     margin-top: .3rem;
     line-height: .25rem;
     }
    
     }
     .code_num {
     svg {
     width: .3rem;
     height: .3rem;
     fill: #ffaa0c;
     }
     }
     .zsd {
     font-size: .25rem;
     height: .35rem;
     line-height: .3rem;
     padding: 0 0.05rem;
     display: inline-block;
     color: @baseBlue;
     background: #fff;
     border: 0.01rem solid @baseBlue;
     box-sizing: border-box;
     border-radius: 3px;
     }
     .fnzs {
     font-size: .25rem;
     height: .35rem;
     padding: 0 0.05rem;
     line-height: .3rem;
     display: inline-block;
     background: @baseBlue;
     color: #fff;
     border: 0.01rem solid @baseBlue;
     box-sizing: border-box;
     border-radius: 3px;
     }
     }
    </style>

    聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

    文檔

    Vue實現搜索結果高亮顯示關鍵字

    本文實例為大家分享了Vue實現搜索結果高亮顯示關鍵字的具體代碼,供大家參考,具體內容如下:1.需要解決的問題 父組件將搜索的字段傳到子組件 子組件接受數據,正則匹配,并替換字段。2.具體代碼;父組件代碼;
    推薦度:
    標簽: 搜索 VUE 關鍵詞
    • 熱門焦點

    最新推薦

    猜你喜歡

    熱門推薦

    專題
    Top
    主站蜘蛛池模板: 久久亚洲国产成人影院 | 亚洲午夜精品 | 国产成人久久 | 日皮影院 | 精品欧美日韩一区二区三区 | 欧美精品一区二区三区久久 | 亚洲图欧美 | 91久久国产情侣真实对白 | 国产网站免费在线观看 | 欧美亚洲综合在线 | 久久精品无遮挡一级毛片 | 一区免费在线观看 | 亚洲欧美久久精品一区 | 韩国精品在线观看 | 最新国产在线视频 | 日韩一区二区三区四区不卡 | 乱妇伦交 | 性刺激欧美三级在线现看中文 | 国产全黄a一级毛片 | 国产精品国产亚洲精品看不卡 | 久久久这里有精品999 | 国产一区二区三区久久 | 久久精品一区二区影院 | 国产丝袜在线视频 | 日本高清一区二区三区不卡免费 | 欧美国产日韩一区二区三区 | 特一级大黄在线观看 | 五月天婷婷久久 | 欧美性俄罗斯18精品 | 制服一区 | 日韩在线欧美高清一区 | 一区二区免费在线观看 | 最新国产在线观看 | 天天做夜夜做久久做狠狠 | 欧美国产日韩一区二区三区 | 一区在线播放 | 精品国产不卡一区二区三区 | 国产日韩欧美中文 | 无遮挡免费看 | 亚洲啪啪网址 | 日韩资源|