使用 Vue 2.1.10
我可以使用v-on
指令绑定到 DOM 事件。例如:
v-on:click
Run Code Online (Sandbox Code Playgroud)
要绑定到 DOM 单击。但是我不知道如何绑定到名称中带有点的事件。例如引导程序中的“show.bs.modal”。
目前,我在created
带有常规 DOM 方法的钩子中使用了一种变通方法绑定,但我真的很想为此使用声明性语法。如何做到这一点?谢谢
编辑: 问题是关于允许的语法:我该如何做:
Vue.component('comp',{
template:'<div v-on:show.bs.modal="sunrise"></div',
methods:{
sunrise:function(e){
}
}
})
Run Code Online (Sandbox Code Playgroud)
小智 9
我在处理旧项目时面临着同样的问题。
幸运的是我在这里找到了答案:vue2 doc
<!-- object syntax (2.4.0+) -->
<button v-on="{ mousedown: doThis, mouseup: doThat }"></button>
Run Code Online (Sandbox Code Playgroud)
这适用于 Bootstrap 5.1.1 和 Vue 2.16.14:
<div class="modal" v-on="{ 'hide.bs.modal': handleModalClose }">
...
</div>
Run Code Online (Sandbox Code Playgroud)
我认为不支持点v-on
,但您可以创建一个自定义指令来为该事件创建事件侦听器。
不确定是否有更简单的东西,但像下面的演示或这个小提琴应该可以工作。
该演示创建了一个名称中带有点的新事件,但它也应该适用于引导事件(未经测试)。如果它不能与 bootstrap 一起使用,请告诉我,我会看看。
仅当您使用v-if
. 如果您直接使用 Javascript 删除该元素。该活动仍然会在那里。
var helloEvent = new Event('demo.event.hello');
document.addEventListener('demo.event.hello', function(e) {
// this is just for testing event dispatching!
console.log('main event listener');
}, false);
const bindCustomEvent = {
getName: function(binding) {
return binding.arg + '.' +
Object.keys(binding.modifiers).map(key => key).join('.');
},
bind: function(el, binding, vnode) {
const eventName = bindCustomEvent.getName(binding);
console.log(el, eventName);
document.addEventListener(eventName, binding.value);
},
unbind: function(el, binding) {
const eventName = bindCustomEvent.getName(binding);
console.log('unbinding', eventName);
document.removeEventListener(eventName, binding.value);
}
};
Vue.directive('bindCustomEvent', bindCustomEvent);
new Vue({
el: '#app',
data() {
return {
enabled: true,
eventMsg: ''
};
},
methods: {
sunrise: function(e) {
console.log('received event');
this.eventMsg = 'received event';
},
testEvent: function() {
document.dispatchEvent(helloEvent);
},
toggle: function() {
console.log('toggle', this.enabled);
this.enabled = !this.enabled;
if (!this.enabled) {
this.eventMsg = '';
}
}
}
})
Run Code Online (Sandbox Code Playgroud)
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.1.10/vue.js"></script>
<div id="app">
<div v-bind-custom-event:demo.event.hello="sunrise" v-if="enabled">
Hello, {{eventMsg}}
</div>
<!--
The following markup is not working
<div v-on="demo.event.hello:sunrise" v-if="enabled">
Hello, {{eventMsg}}
</div>-->
<button @click="testEvent()">
Change
</button>
<button @click="toggle">
<span v-if="enabled">disable custom event</span>
<span v-else>enable custom event</span>
</button>
</div>
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2139 次 |
最近记录: |