【问题标题】:How trigger router-link click before blur on vue?如何在vue模糊之前触发路由器链接点击?
【发布时间】:2021-10-14 19:29:19
【问题描述】:

我想在输入中搜索并显示结果。在输入输入后显示结果的 div 时,会出现一些路线,我想单击它们并转到另一个页面。 此外,如果我在输入搜索之外单击,则关闭结果的 div。我在blur 上将visible 更改为false。 但是blurrouter-link 点击之前触发。所以当我点击路由器链接时无法进入新页面。 如何在click 之后强制blur 触发?还是不在结果的div上触发?

var app = new Vue({
  el: '#app',
  data() {
    return {
      visible: false
    }
  },
  methods: {
    show() {
      this.visible = true
    }
  }
})
<link type="text/css" rel="stylesheet" href="https://unpkg.com/bootstrap@4.5.3/dist/css/bootstrap.min.css" />
<link type="text/css" rel="stylesheet" href="https://unpkg.com/bootstrap-vue@2.21.2/dist/bootstrap-vue.css" />

<script src="https://unpkg.com/vue@2.6.12/dist/vue.min.js"></script>
<script src="https://unpkg.com/bootstrap-vue@2.21.2/dist/bootstrap-vue.min.js"></script>


<div id="app">
  <div>
    <input @keyup="show()" @blur="visible = false"/>
    <div v-if="visible">
      <router-link
        to="{name: 'sample', params: {sample: 'sample'}}"
      >
       Go to another page
      </router-link>
    </div>
  </div>
</div>

【问题讨论】:

    标签: javascript vue.js


    【解决方案1】:

    您可以在路由器链接的点击侦听器中隐藏链接,而不是在输入模糊时隐藏链接,就像我在下面的代码中所做的那样。但是,为什么你需要隐藏链接?更改路线将使其删除。

    var app = new Vue({
      el: '#app',
        data() {
            return {
                    visible: false
                }
            }
        },
        methods: {
            addListener() {
                document.querySelector('#app').addEventListener("click", hideLink );
                this.visible = true;
            }
        }
    })
    
    
    function hideLink(params) {
        document.querySelector('#app').removeEventListener("click", hideLink );
        this.visible = false;
    }
    
    <link type="text/css" rel="stylesheet" href="https://unpkg.com/bootstrap@4.5.3/dist/css/bootstrap.min.css" />
    <link type="text/css" rel="stylesheet" href="https://unpkg.com/bootstrap-vue@2.21.2/dist/bootstrap-vue.css" />
    
    <script src="https://unpkg.com/vue@2.6.12/dist/vue.min.js"></script>
    <script src="https://unpkg.com/bootstrap-vue@2.21.2/dist/bootstrap-vue.min.js"></script>
    
    
    <div id="app">
            <div>
                <input @focus="addListener" />
                <div v-if="visible">
                    <router-link
                        to="{name: 'sample', params: {sample: 'sample'}}"
                        @click.prevent.native="visible = false"
                    >
                        Go to another page
                    </router-link>
                </div>
            </div>
        </div>
    

    【讨论】:

    • 这样当点击页面其他部分时无法隐藏我需要的结果div
    • 好的,然后您可以向#app 添加事件监听器,当检测到点击时,您可以隐藏链接并删除监听器
    • 我已经更新了代码。你可以试试这个方法
    • 似乎它再次发生,听众点击应用比转到新页面更快。网址已更改但留在页面中不会转到新页面
    猜你喜欢
    • 2021-03-27
    • 1970-01-01
    • 2021-09-13
    • 1970-01-01
    • 2013-09-12
    • 1970-01-01
    • 2021-09-09
    • 2018-02-10
    • 1970-01-01
    相关资源
    最近更新 更多