VUE 让页面上显示的代码拥有高亮效果

需要用到highlight.js

npm install highlight.js

创建一个js文件

let hljs = require('highlight.js');

let vueHighlightJS = {};
vueHighlightJS.install = function install(Vue) {
    Vue.directive('highlightjs', {
        deep: true,
        bind: function bind(el, binding) {
            let targets = el.querySelectorAll('code');
            let target;
            let i;
            for (i = 0; i < targets.length; i += 1) {
                target = targets[ i ];
                if (typeof binding.value === 'string') {
                	 directive, use this
                	 target.textContent = binding.value;
                }

                hljs.highlightBlock(target);
            }
        },
        componentUpdated: function componentUpdated(el, binding) {
            let targets = el.querySelectorAll('code');
            let target;
            let i;
            for (i = 0; i < targets.length; i += 1) {
                target = targets[ i ];
                if (typeof binding.value === 'string') {
                    target.textContent = binding.value;
                }
                hljs.highlightBlock(target);
            }
        }
    });
};
module.exports = vueHighlightJS;

这里封装好VUE的指令一来是方便我们使用 highlight.js,还有一个更重要的原因,就是在路由改变、页面部分重新渲染时,可能不会再次运行highlight.js中的方法,页面的高亮效果可能会出现一些问题。componentUpdated让指令所在组件的 VNode 及其子 VNode 全部更新后调用,可以避免这种情况的发生。
然后我们在main.js中:

import Vue from 'vue';
import VueHighlightJS from '../src/mixins/textUpdate.js';
import 'highlight.js/styles/googlecode.css';
Vue.use(VueHighlightJS);

这里引入的css只是众多高亮风格中的其中一种,想要更多的高亮风格,大家可以去node_modules中higlight.js/style文件夹中自行查找。
最后在需要的地方使用指令:

<pre v-highlightjs>
	<code class="" v-text=""></code>
</pre>

就大功告成啦,效果在下面↓↓↓↓↓↓↓
在这里插入图片描述
这一段显示出来的代码,是直接从dom元素中提取出来并显示的,具体的dom就是上面的四个按钮。具体怎么从dom中提取并显示,后面再写一个帖子。

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要让 Vue3 的 tinymce 组件支持代码高亮,可以使用 tinymce 的 Code Sample 插件。首先需要在组件中引入 Code Sample 插件,然后在 tinymce 的初始化配置中启用该插件,并设置插件的语言列表。以下是一个示例代码: ```html <template> <div> <tinymce v-model="content" :init="initSettings"></tinymce> </div> </template> <script> import tinymce from 'tinymce/tinymce'; import 'tinymce/themes/silver'; import 'tinymce/plugins/code'; import 'tinymce/plugins/codesample'; import 'tinymce/skins/ui/oxide/skin.css'; import 'tinymce/skins/ui/oxide/content.css'; export default { components: { tinymce, }, data() { return { content: '', initSettings: { skin: false, content_style: 'body { font-family: Helvetica, Arial, sans-serif; font-size: 14px }', plugins: 'code codesample', toolbar: 'undo redo | bold italic underline | code | codesample', codesample_languages: [ { text: 'HTML/XML', value: 'markup' }, { text: 'JavaScript', value: 'javascript' }, { text: 'CSS', value: 'css' }, { text: 'PHP', value: 'php' }, { text: 'Ruby', value: 'ruby' }, { text: 'Python', value: 'python' }, { text: 'Java', value: 'java' }, { text: 'C', value: 'c' }, { text: 'C#', value: 'csharp' }, { text: 'C++', value: 'cpp' }, ], }, }; }, }; </script> ``` 在上面的代码中,首先引入了 tinymce、Code Sample 插件以及相关的 CSS 文件。然后在组件的 data 中定义了 content 和 tinymce 的初始化配置项。其中,需要注意的是,codesample_languages 列表中的 value 值应该与 Prism.js 支持的语言名称一致。最后在组件的模板中使用 tinymce 组件即可。 需要注意的是,如果你要使用 Vue3 的 tinymce 组件,需要安装 @tinymce/tinymce-vue3 包。此外,为了让代码高亮正常工作,还需要在项目中引入 Prism.js 库,并在页面中引入 Prism.js 的 CSS 文件。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值