【发布时间】:2021-01-18 20:54:03
【问题描述】:
我尝试实现一个非常简单的 Markdown 格式化指令(只是粗体、强调和删除线)以更加独立于 vue-18n 格式化。当前指令如下所示:
import _Vue from 'vue';
const emphasize = (str: string) => {
const matched = /(\*|_)(.*?)(\*|_)/gm;
return str.replace(matched, '<em>$2</em>');
};
const strong = (str: string) => {
const matched = /(\*\*|__)(.*?)(\*\*|__)/gm;
return str.replace(matched, '<strong>$2</strong>');
};
const strikeThrough = (str: string) => {
const matched = /~~(.*?)~~/gm;
return str.replace(matched, '<s>$2</s>');
};
const fromMd = (str: string) => strikeThrough(emphasize(strong(str)));
export default {
install: (Vue: typeof _Vue): void => {
/* eslint-disable no-param-reassign */
Vue.directive('tmd', {
bind(el: HTMLElement) {
el.innerHTML = fromMd(el.innerHTML);
},
inserted(el: HTMLElement) {
el.innerHTML = fromMd(el.innerHTML);
},
update(el: HTMLElement) {
el.innerHTML = fromMd(el.innerHTML);
},
});
},
};
我是这样使用的:
<p v-tmd >{{ $t('path-to-translation', ) }}</p>
到目前为止,它运行良好,但问题是,当我更改语言时,指令似乎没有更新。它接收到updated 事件,但el.innerHTML 没有更新,所以它呈现旧的。实现这种行为的最佳做法是什么?
【问题讨论】:
标签: typescript vue.js vuejs2 vue-i18n