Vue通过js代码调用vue实例,解决v-html字符串里存在点击事件无效的问题_v-html @click_Oscrazy的博客-程序员秘密

技术标签: vue  前端  VueJs  

方法适用Vue.js和Vue-cli

先来说一下我的应用场景, 使用leaflet地图时, 点击地图的标注点弹出一个信息框, 里面有个按钮, 这时问题就来了, 这个api是需要传一段html进去的, 里面包含调用vue实例的方法

res.data.forEach(item => {
    
    this.markerPoint(item.locs[0].lat, item.locs[0].lng, carMakerIcon,
    `
        <h2 style="text-align: center;">车辆信息</h2>
        <div><b>车牌号码</b>:${
      item.locs[0].name}</div>
        <div><b>分组名称</b>:${
      item.locs[0].dept}</div>
        <div><b>位置时间</b>:${
      item.locs[0].gpstime}</div>
        <div><b>所在位置</b>:${
      item.locs[0].info}</div>
        <div><b>方向</b>:${
      item.locs[0].direct}</div>
        <div><b>状态</b>:${
      item.locs[0].state}</div>
        <div><b>行驶里程</b>:${
      item.locs[0].distance} km</div>
        <div><b>行驶总里程</b>:${
      item.locs[0].totalDis} km</div>
        <div style="margin-top: 10px;text-align: right">
        <button @click="getVehiclesHisData('${
      item.vid}','${
      item.vKey}')">运动轨迹</button></div>
	`);
})

可以看到最后一行, 我使用了@click, 但是vue不会编译html字符串的, 导致点击事件无效, 所以只能另寻办法

如果是只有一个点的情况下就好解决, 但是现在我是多个点要动态生成

于是找到一种目前能完美解决方法, 但不太规范

在初始化页面时将vue的实例对象赋值到全局变量中

<script>
export default {
    
  data() {
    
    return {
    
    }
  },
  mounted() {
    
      //this是当前vue实例对象
      window.mapVue = this;
  }
}
</script>

然后我html的的字符串中不再使用@click, 这时候使用onclick原生的方式调用js
res.data.forEach(item => {
    
    this.markerPoint(item.locs[0].lat, item.locs[0].lng, carMakerIcon,
    `
        <h2 style="text-align: center;">车辆信息</h2>
        <div><b>车牌号码</b>:${
      item.locs[0].name}</div>
        <div><b>分组名称</b>:${
      item.locs[0].dept}</div>
        <div><b>位置时间</b>:${
      item.locs[0].gpstime}</div>
        <div><b>所在位置</b>:${
      item.locs[0].info}</div>
        <div><b>方向</b>:${
      item.locs[0].direct}</div>
        <div><b>状态</b>:${
      item.locs[0].state}</div>
        <div><b>行驶里程</b>:${
      item.locs[0].distance} km</div>
        <div><b>行驶总里程</b>:${
      item.locs[0].totalDis} km</div>
        <div style="margin-top: 10px;text-align: right">
        <button οnclick="getVehiclesHisData('${
      item.vid}','${
      item.vKey}')">运动轨迹</button></div>
	`);
})

在vue实例外声明一个js 方法, 然后再调用vue里面的东西, window.mapVue 就相当于平时vue里面this那样正常使用, 外部的js只是起到一个代理作用
<script>
export default {
    
    data() {
    
        return {
    
        }
    },
    mounted() {
    
        //this是当前vue实例对象
        window.mapVue = this;
    },
    methods:{
    
        getVehiclesHisData(vid, vKey){
    
            console.info(`vue => ${
      vid}, ${
      vKey}`)
        }
    }
}

window.getVehiclesHisData = function (vid, vKey){
    
  console.info(`js => ${
      vid}, ${
      vKey}`)
  //通过全局调用vue实例对象
  window.mapVue.getVehiclesHisData(vid, vKey);
}
</script>

终极写法 : 甚至懒一点连js都被不用写了, 直接调用全局Vue实例
<button onclick="window.mapVue.getVehiclesHisData('${item.vid}','${item.vKey}')">运动轨迹</button>
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/Oscrazy/article/details/117334074

智能推荐

计算机视觉论文-2021-11-02_cross-modality fusion transformer for multispectra_SophiaCV的博客-程序员秘密

本专栏是计算机视觉方向论文收集积累,时间:2021年9月15日,来源:paper digest欢迎关注原创公众号【计算机视觉联盟】,回复【西瓜书手推笔记】可获取我的机器学习纯手推笔记!直达笔记地址:机器学习手推笔记(GitHub地址)标题:天文学中深度学习算法的鲁棒性——星系形态学研究作者:阿依普里亚诺维奇等。类别: 天体 ph.GA [天文 ph.加, cs.简历, cs.LG |亮点:深度学习模型正越来越多地被广泛应用于科学领域,特别是处理高维和大量的科学数据。标题:基...

用AutoIT删除新浪微博关注博主_方剑斌的博客-程序员秘密

前几天,不知为何,我新浪微博忽然多关注了几百个莫名其妙的博主。猜到可能是被盗号,赶紧更改密码,然后开始删除无用的关注。这简直是我这辈子最痛苦的工作。删了一百来个后,我浑身发抖,实在受不了了,就在网上搜索有没有工具。倒是找到了一个,可一天居然只能用一次,否则要收钱!好歹我也总自夸还是一个程序员,我决定自己写段代码解决。工具我决定用AutoIT,看过很多Demo,没真正用过。向同事请教了5分钟,利用两

【云原生 • Docker】cAdvisor+Prometheus+Grafana 10分钟搞定Docker容器监控平台_Reactor2020的博客-程序员秘密

【云原生 • Docker】cAdvisor+Prometheus+Grafana 10分钟搞定Docker容器监控平台

什么是优雅的代码_dongxie548的博客-程序员秘密

我喜欢优雅和高效的代码。代码逻辑应该直接了当,叫缺陷难以隐藏;尽量减少依赖关系,使之便于维护;依据某种分层战略完善错误处理代码。性能调制最优,省的引诱别人做没规矩的优化,搞出一堆混乱来。整洁的代码只做好一件事。 –bjarne stroustrup(《c++程序设计语言》作者)简洁的代码简单直接。简洁的代码如同优美的散文。简洁

定时任务管理中心(dubbo+spring)-我们到底能走多远系列47_dubbo 服务 定时任务参数刷新_feng020a的博客-程序员秘密

我们到底能走多远系列47扯淡:  又是一年新年时,不知道上一年你付出了多少,收获了多少呢?也许你正想着老板会发多少奖金,也许你正想着明年去哪家公司投靠。  这个时间点好好整理一下,思考总结一下,的确是个非常好的机会。  年终的时候各个公司总会评一下绩效,拉出各位的成绩单,你是不是想说:去你妈的成绩单,我不是你的学生,老子努力工作不是为了看你脸色!当然啦,你想说这话的前提是:你很牛b

ORA-00838: Specified value of MEMORY_TARGET is too small_weixin_30314631的博客-程序员秘密

在解决ORA-00020:maximum number of processes (150) exceeded问题时,不小心将processes值设置太大,就会造成这个问题。但此时DB已经被shutdown了, 直接startup DB无法启动, 如下报错.SYS&gt; startupORA-00838: Specified value of MEMORY_TARGET is too sma...

随便推点

linux命令_复制文件/目录到指定目录下_linux目录内容拷贝_明月爱清风的博客-程序员秘密

复制文件:把1.txt         复制到根目录下的sbin目录     cp +文件名(可带路径)+目标路径(带路径)                     如:   cp   1.txt  ~/sbin/     复制目录:把release      复制到根目录下的nfs目录下   1.【cp】 +【-r】+【目录名(可带路径)】+【目标路径(带路径)】      ...

java集合笔记_艹民一G的博客-程序员秘密

Collection接口:是List、Set、Queue接口的父接口,定义了可用于操作List、Set、Queue的方法----增删改查List接口及其实现------ArrayList,List是元素有序并且可以重复的集合,被称为序列。简单的学生选课实例:package com.collection;public class Course { String id

第十五周(2)-阅读程序_Monster's cat的博客-程序员秘密

问题及代码:/**烟台大学计算机与控制工程学院*文件名称:yuedu2.cpp*作 者:闫安*完成日期:2016年6月17日*版 本 号:codeblocks 16.01**问题描述:阅读程序2*程序输入:无*程序输出:运算结果*/#include #include #include #include using namespace std;int mai

陈莉君: Linux内核的那些书_Linux阅码场的博客-程序员秘密

12月10日,50几位广州的Linuxer在广州心田庄园举行了Linux workshop。四大主题演讲,蜗窝大侠郭健主持。这是陈莉君老师的演讲slides。处处逢归路头头达故乡本来成现事何必待思量为学患无疑,疑则有进也,小疑则小进,大疑则大进从岩隙涌出的山泉,为河川之始。悟,觉也陈老师给读者签名中:往期精选陈莉君教授: 回望踏入Linux内核之旅阿里杨勇:浅谈 Linux 高负载的系统化分析宋宝

求两个数互质算法_shkkhd的博客-程序员秘密

用欧几里德算法(辗转相除法)求两个数的最大公约数的步骤如下: 先用小的一个数除大的一个数,得第一个余数; 再用第一个余数除小的一个数,得第二个余数; 又用第二个余数除第一个余数,得第三个余数; 这样逐次用后一个数去除前一个余数,直到余数是0为止。那么,最后一个除数就是所求的最大公约数(如果最后的除数是1,那么原来的两个数是互质数)。  void f(const int m,const int n)

原根(知识学习+板子总结+例题+应用)_13的原根有哪些_Code92007的博客-程序员秘密

思路来源https://baike.baidu.com/item/%E5%8E%9F%E6%A0%B9/8103534?fr=aladdinhttps://blog.csdn.net/zoro_n/article/details/78200742https://www.cnblogs.com/Dance-Of-Faith/p/9905786.html《数学的思维方式与创新》 丘维声...

推荐文章

热门文章

相关标签