vue的模板字符串使用v-html渲染的坑

426 阅读1分钟

有一个需求是弹框然后有字体是绿色,点击绿色会路由跳转,
发现报错,打印子组件的this也是undefined,父组件明明定义了,在onclick打印this发现是span标签他自己,然后无数次尝试后发现,这是原生的html不是vue,所以找不到方法。

image.png

自己封装的组件,导入使用

 Prompt({
          title: this.$t("feeLv.xttitle"),
          content:
            this.$t("feeLv.xtcontent") +
            `<span class="green-text" onclick="toAssetInfo()">${this.$t(
              "feeLv.xtcontent2"
            )}
        </span>`,
          type: "confirm",
        }).then((confirm) => {});
      });

坑1:v-html不能识别vue的@click,这里相当于是原生的html,所以采用原生的方式去进行onclick=“to()”,这里方法必须带(),接着是将vue的this.to挂载到window上面,不然会报to方法undefined,

mounted() {
    (window as any).toAssetInfo = this.toAssetInfo;//这里采用的是ts的写法
  }

然后就可以进行跳转啦 坑2:官方文档也说明了style里面声明scoped的话样式也是不会生效的,要另外去style不带scoped

总结:v-html就是将模板字符串渲染成原生的html,定义方法和样式都不能采用vue的模板,必须要采用原生的写法才会生效。