搜索框没有光标,点击无法捕获对象

来源:2-1 搜索框组件

慕妹2075046

2019-09-16 10:30:59

------------home-header

<template>

    

        <me-navbar class="header" title="" v-show="visible">

            <i class="iconfont icon-scan" slot="left"></i>

            <me-search-box

            placeholder="开学季有礼,好货5折起"

      slot="center"

      fake

      @query="getQuery"

      @click.native="goToSearch"

            ></me-search-box>

            <!-- 自定义组件的点击事件要加上click.native -->

            <i class="iconfont icon-msg" slot="right"></i>

        </me-navbar>

    

</template>

<script>

import MeNavbar from 'base/navbar';

import MeSearchBox from 'base/search-box';


export default {

    name: 'HomeHeader',

    components: {

        'me-navbar': MeNavbar,

         'me-search-box': MeSearchBox

    },

    data(){

      return{

        visible: true//自己控制自己的显示和隐藏,所以不用外面来传入变量

      }

    },

    methods: {

      show(){

          this.visible = true;

      },

      hide(){

          this.visible = false;

      },

      getQuery(query){//通过监听search输入框的内容query,通过这个内容从夫区其获取相应的数据


      },

      goToSearch(){

        this.$router.push('/');//将地址push进来,保存历史记录

      }

    },

    //  goToSearch() {

    //     this.$router.push('/search');

    //   }

}

</script>

<style lang="scss" scoped>

  @import "~assets/scss/mixins";

  .header {

    &.mine-navbar {

      /*background-color: $header-bgc-translucent; */

      background-color: transparent;

      transition: background-color 0.5s;

    }


    &.header-transition {

      background-color: $header-bgc-translucent;

    }


    .iconfont {

      color:$icon-color-default;

      font-size: $icon-font-size;

    }

  }

</style>

-------------base-search-index

<template>

  <div class="mine-search-box-wrapper">

    <i class="iconfont icon-search"></i>

    <!-- 获取焦点后会出现另外一个专门的搜索页面,而不是直接在header页面上出现输入法的搜索页面,传入fake就显示这个真正的搜索页面-->

    <div class="mine-search-box" v-if="fake">{{placeholder}}</div>

    <!-- 下面的input是header页面的搜索框没有真正搜索的功能,点击之后进入真正的搜索框 -->

    <input

      class="mine-search-box"

      type="text"

      title="搜索框"

      :placeholder="placeholder"

      ref="input"

      v-model="query"

      v-if="!fake"

    >

    <i

      class="iconfont icon-close"

      v-show="query"

      @click="reset"

    ></i>

  </div>

</template>


<script>

import {debounce} from 'assets/js/util';


export default {

    name: 'MeSearchBox',

    props:{

        placeholder:{

            type: String,

            default: '请输入搜索内容'

        },

        fake: {

            type: Boolean,

            default: false

        }

    },

    data() {

        return {

            query: ''

        }

    },

    watch: {

        query: debounce(function (){//因为每次输入,query页会发送改变,监听query就行

        this.$emit('query', this.query);//向外发送query,外面想知道就需要在该页面监听

    

    }),

    },

    methods: {

      focus() {

        this.$refs.input && this.$refs.input.focus();

      },

      clear() {

        this.query = '';

      },

      reset() {

        this.clear();

        this.focus();

      }

    }

  };

</script>

<style lang="scss" scoped>

  @import "~assets/scss/mixins";


  $search-box-height: 30px;


  .mine-search-box-wrapper {

    display: flex;

    align-items: center;

    width: 100%;

    height: $search-box-height;

    padding: 0 7px;

    background-color: #fff;

    border-radius: $search-box-height / 2;

  }


  .iconfont {

    color: $icon-color;

    font-size: $icon-font-size-sm;

    font-weight: bold;

  }


  .mine-search-box {

    flex: 1;

    background: none;

    border: none;

    margin: 0 6px;

    color: #666;

    line-height: 1.5;

  }

</style>


写回答

1回答

好帮手慕码

2019-09-16

同学你好!

这一块的逻辑是:点击home的输入框会跳转到搜索页,搜索页的输入框会有光标,输入之后可以删除

http://img.mukewang.com/climg/5d7f01ea097535d805330126.jpg

http://img.mukewang.com/climg/5d7f02040974a72f03820071.jpg

将同学的代码放在源码环境中测试,问题如下:

http://img.mukewang.com/climg/5d7f023a094637bb03660106.jpg

如果帮助到了你,欢迎采纳,祝学习愉快~

0

0 学习 · 10739 问题

查看课程