vue 一个方法绑定到两个元素上 判断触发源

搜索功能 热词和历史都能点击搜索 任何一个单独都行 但是判断event就出错 现在这样写 热词保存到state的searchKey是错的 点击热词不能实现搜索

clipboard.png

<div class="hotTag">
            <p>热门搜索</p>
            <ul>
                    <li class="s1" v-for="(song,index) in this.$store.state.hotList" v-on:click="search(index,$event)">
                         <router-link to="/mine/searchPage/searchResult">{{song.songname}}
                          </router-link>
                    </li>
            </ul>

        </div>
        <div class="historyTag">
           <ul>
                <li class="history">搜索历史</li>
                <li class="clearhistory" v-on:click="clearHistory">清空历史</li>
           </ul>
            <ul>
                <li class="s2" v-for="(item,index) in this.$store.state.searchArr"  v-on:click="search(index,$event)">
<!--                   不包住整个是为了能点击删除 不然跳转-->
                    <router-link to="/mine/searchPage/searchResult">
                       <span class="itemName">{{item}}</span>
                    </router-link>
                       <span class="deleteIcon"><img v-on:click="deleteHistory(index)" src="../img/playimg/close(2).svg"></span>
                    
                </li>
              
<!--
                <li >张敬轩</li>
                <li class="deleteIcon"><img src="../img/playimg/close(2).svg"></li>
-->
            </ul>
        </div>
 search:function(index,event){
                if($(event.target).hasClass('s1')){
                     this.$store.state.searchKey=this.$store.state.hotList[index].songname
                }
                else if($(event.target).hasClass('s2')){
                    this.$store.state.searchKey=this.$store.state.searchArr[index]
                }
                console.log(this.$store.state.searchKey)
                this.$http.get('https://route.showapi.com/213-1?keyword='+this.$store.state.searchKey+'&page=1&showapi_appid=33605&showapi_timestamp=&showapi_sign=06407a004abc491d9b04d32bbcee27c9',).then(function (response) {
                    // 这里是处理正确的回调
                    this.$store.state.list = response.body.showapi_res_body.pagebean.contentlist;
                this.$store.state.playminishow=true
                })
                
                //保存搜索历史到localstorage
                this.$store.state.searchArr.unshift(this.$store.state.searchKey)
                this.$store.state.searchArr=removeDuplicatedItem(this.$store.state.searchArr)

            },
阅读 3.6k
1 个回答

要判断不同触发源,可以用 $event 参数进行判断,你这里用 class 应该是没问题的

也可以把事件绑定的内联语句加上另一个常量参数(比如叫 source),彻底数据驱动,脱离 DOM 元素的判断

vuex 中的 state 赋值应使用 mutation 进行,不要直接修改

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题