最好的事情是从开始......所以: 在我正在进行的项目(AngularJS)中,我使用CKEditor作为所见即所得编辑器。一切都很好,直到我想添加codesnippet功能。
CKE生成纯HTML代码,我可以将其绑定到模型以实时查看正在发生的事情。在我这边,我一直在使用ng-bind-html来查看结果并且效果很好。每个基本的HTML代码都是工作,粗体,斜体,标题..字体,大小等。
当CodeSnippet插件(http://ckeditor.com/addon/codesnippet)进入时...... 它停止工作(我的意思是代码片部分)。 不工作的HTML示例(顺便说一句CKE生成代码,& lt和& gt而不是普通标签<和> ..所以我必须替换它们......但是从来没有问过它不是问题:))。 代码段的示例(在ng-bind端不起作用):
<code class="language- html"><html><body>Test</body></html></code>
问题是内部编辑器一切正常,但在外面(当绑定到ng-bind-html指令时),它不是。
到目前为止我尝试了什么:
- 我包含了CKE编辑器内部使用的CSS文件..毫无价值。
- 代码片段插件使用highlight.js所以我试图将CKE html代码转换为highlight.js一个..它工作了!
例如:
<div compile="true" hljs language="css”>whatever</div>
但问题是CKE编辑器产生复杂的文本(包括代码片段,其他东西,引号等)。所以如果我将所有这些都放入HLJS指令中......它会突出显示所有内容。这不是我想要实现的目标。
我对此问题的解决方案是使用HLJS +普通html代码添加动态指令。结果示例: (hljs指令其hightlight.js的angular指令):
<div id="hl" compile="true" hljs language="css">example</div>
<p><strong>Damn</strong></p>
<div id="hl" compile="true" hljs language="cpp">Other snippet</div>
为了使它工作,我不得不重新编译我添加的整个代码..所以我把它放到指令中,它会在更新后监视并重新编译代码。
而且..它有效!!但是......这就是真正的问题:
*它仅适用于HTML有效的代码片段,因为$ compile以某种方式验证了所有这些内容......发生了什么? '&LT;'标签转换为'&amp; LT;” ...如果我打开一些HTML标签..它立即关闭它......(如果我忘了'它)和许多其他奇怪和不可接受的东西。
你知道吗? 我试图尽可能清楚地解释这个问题,但如果你有任何进一步的问题......