VueJS - 在链接点击时防止默认,但也捕获对象

Nig*_*ICU 23 html javascript vue.js

我正在学习Vue.JS并遇到了一些问题.我希望用户能够单击<a href="#"></a>标签e.preventDefault(),并且还可以获取与链接关联的对象.这是我的代码(注意我@之前有{{因为我正在使用Blade):

<a href="#"
   class="list-group-item"
   v-repeat="responder: responders"
   v-on="click: showResponder(responder)">
    <div class="media">
        <div class="media-left">
            <img src="" v-attr="src: responder.avatar" alt="" class="media-object"/>
        </div>
        <div class="media-body">
            <h4 class="media-heading">@{{ responder.first_name }} @{{ responder.last_name }}</h4>
            <p>
                <strong><i class="fa fa-phone"></i> Phone:</strong> @{{ responder.phone }}
            </p>
        </div>
    </div>
</a>
Run Code Online (Sandbox Code Playgroud)

和Javascript:

var vm = new Vue({
    el: "#responderContainer",
    data: {
        activeResponder: null,
        responders: []
    },
    methods: {
        showResponder: function(responder)
        {
            // Here is where I wish to prevent the 
            // link from actually firing its default action
            responder.preventDefault();
            this.activeResponder = responder;
        }
    }
});
Run Code Online (Sandbox Code Playgroud)

这样可以抓住responder对象但是激活链接 - 我需要能够同时e.preventDefault()获取对象.

谢谢!

nil*_*ils 38

或者,在Vue 1.x中,您还可以使用事件修饰符 .prevent:

HTML:

<a v-on:click.prevent="showResponder(responder)">...</a>
Run Code Online (Sandbox Code Playgroud)

你也可以停止传播:

<a v-on:click.prevent.stop="showResponder(responder)">...</a>
Run Code Online (Sandbox Code Playgroud)

JS:

...
            showResponder: function(responder)
            {
                // No need to prevent any more
                this.activeResponder = responder;
            }
...
Run Code Online (Sandbox Code Playgroud)

  • 它应该是`v-on:click.prevent` (4认同)
  • 当没有调用方法时,例如简单的&lt;a href="mailto:someone@example.org"&gt;链接,如何防止事件传播? (2认同)
  • 对于@MladenDanic 的观点,“prevent”将阻止默认行为,“prevent.stop”也将停止传播。例如:如果您通过下拉导航中的锚点单击触发自定义方法,则“prevent.stop”还将阻止“单击”事件,并使下拉菜单保持打开状态。“prevent”将停止锚链接,但允许事件针对“点击”行为冒泡 (2认同)

Pat*_*ans 24

文件显示,你可以通过$事件获得事件对象

http://vuejs.org/guide/events.html

<button v-on="click: submit('hello!', $event)">Submit</button>

/* ... */
{
  methods: {
    submit: function (msg, e) {
      e.stopPropagation()
    }
  }
}
/* ... */
Run Code Online (Sandbox Code Playgroud)

所以你想要v-on属性

v-on="click: showResponder(responder,$event)"
Run Code Online (Sandbox Code Playgroud)

和函数定义

showResponder: function(responder,e)
Run Code Online (Sandbox Code Playgroud)