如何防止vue.js覆盖组件中的jQuery绑定
How do I prevent vue.js from overwriting jQuery bindings in components?
我正在一个现有的项目中实现vue.js,并将vue实例绑定在id为"app"的body标记上。
到目前为止,jQuery和Vue.js的配合非常好。然而,当我创建组件时,这些组件中的所有jQuery绑定都不再工作。
但是,根实例中的绑定仍在运行。
HTML:
<body id="app">
<button class="button-app" @click="showMessage('app')">APP</button>
<some-component inline-template>
<div>
<button class="button-component" @click="showMessage('component')">COMPONENT</button>
</div>
</some-component>
</body>
Javascript:
$('.button-app').on('click', function()
{
console.info('jQuery: app');
});
$('.button-component').on('click', function()
{
console.info('jQuery: component');
});
var Component = Vue.extend({
methods: {
showMessage: function(message)
{
console.info('vue.js component: ' + message);
}
}
});
new Vue({
el: '#app',
methods: {
showMessage: function(message)
{
console.info('vue.js: ' + message);
}
},
components: {
'some-component': Component
}
});
这里有一把小提琴来展示和证明我上面所描述的:https://jsfiddle.net/z7o8wkz7/2/
这是正常的行为吗?或者我可以做些什么来保持组件中的jQuery绑定有效吗?
编辑:
由于我使用的是pjax、jquery和vuejs,我已经通过以下方式解决了正确的加载顺序:
app.js:
$(document).on('ready pjax:end', function() {
// init vue.js and load components here
$(document).trigger('vue:loaded');
});
一些查询文件.js:
$(document).on('vue:loaded', function() {
// bind jquery stuff
});
这样可以确保在加载pjax和初始化vue组件之后(重新)评估jQuery绑定。效果很好!
创建组件时,Vue.js编译模板(内联或非内联)并将其插入文档(生命周期)。
因此,您应该将jQuery事件附加在Vue的根实例之后,或者将它们重新初始化到ready
函数中,因为组件将更改DOM。
示例
进入就绪功能
在根实例之后
将jquery代码放入已安装的函数
相关文章:
- 将jQuery绑定到多个元素
- jQuery 绑定以选择更改
- 使用ajax/jquery绑定Json数据
- 在.load和.getScript之后的jQuery绑定仅在警报之后有效
- jQuery绑定了没有DOM元素的AJAX事件
- Jquery差异B/w Jquery绑定事件
- html+jquery(绑定onclick事件以执行onclick之前的操作)
- jQuery绑定到粘贴事件,如何获取粘贴的内容
- jquery绑定函数不起作用
- jQuery绑定ajax:成功地不在rails3app中为新创建的(ajax)项工作
- jQuery 绑定/更改为下拉表单
- jQuery绑定与不同的this
- jQuery 绑定函数不起作用
- 无法使用 jquery 绑定按钮上的单击事件
- 在 SharePoint Application Page 2013 中使用 JQuery 绑定和取消绑定函数
- jQuery 绑定和“点击”evnts 在 IE9 中不起作用
- jQuery 绑定以切换元素的不透明度
- jQuery:绑定元素以在其内容更改时显示/隐藏
- JQuery 绑定此和数据属性
- JQuery 绑定 () 导致的异常行为