javascript - Vue.js 在实例内添加事件监听器?
问题描述
昨天刚开始学习 Vue,我喜欢它。当用户点击带有电话号码的锚点时,我试图触发一个事件:
var phoneNumbers = new Vue({
el: "a[href^='tel:']",
methods: {
onClick() { console.log('a phone number was clicked'); }
}
})
问题是,我想(在这种特殊情况下)不必将 v-on:click="" 添加到实际元素中。这是因为我正在处理一个 CMS,用户可以在其中添加指向电话号码的链接,而他们不会将 vue 属性添加到标记中。
有什么方法可以做到这一点?
谢谢!
解决方案
您可以通过 引用组件的根 DOM 元素this.$el
。
您可以在挂钩中添加点击监听器mounted
(您还需要在destroyed
挂钩中删除监听器):
mounted() {
this.$el.addEventListener('click', this.onClick);
},
destroyed() {
this.$el.removeEventListener('click', this.onClick);
}
这是一个工作示例:
Vue.config.productionTip = false;
Vue.config.devtools = false;
var phoneNumbers = new Vue({
el: "a[href^='tel:']",
methods: {
onClick() {
console.log('a phone number was clicked');
}
},
mounted() {
this.$el.addEventListener('click', this.onClick);
},
destroyed() {
this.$el.removeEventListener('click', this.onClick);
}
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script>
<a href="tel:5555555555">555-555-5555</a>
推荐阅读
- python - 无法从客户端到服务器套接字接收完整的帧
- javascript - IE11函数未通过构造函数
- c - 结构到 uint8 铸造
- javascript - 从 Svelte 组件内部绑定到 offsetHeight
- python - Python Uno 纸牌游戏
- jquery - 在递增时一个接一个地寻址
- google-chrome - 如何在 Chrome 中使用 vbscript 打开 Pdf 并通过在 url 中添加 # 进行搜索
- amazon-dynamodb - 如何使用第二个键查询 DynamoDB 行
- java - 如何在我的 Android 应用中保存夜间模式的状态?
- c# - 查找中继器的索引值以打开新的 Web 表单并从 SQL 读取数据