【发布时间】:2018-02-17 13:55:19
【问题描述】:
需要帮助将 CKEditor 添加到我的 ANGULAR 4("@angular/core": "^4.2.4") 组件。
如果我将 <script src="https://cdn.ckeditor.com/4.7.0/standard-all/ckeditor.js"></script> 添加到 index.html ,这将起作用,但库非常重,这就是我尝试通过组件加载源脚本的原因。
我在所有生命周期挂钩上尝试了安全标记槽管道。 如果向构造函数添加安全标记,则脚本会加载源代码,但 CKEditor 库无法在 DOM 中看到源脚本。
非常感谢任何帮助。
源代码: cke-component.component.component.ts
import { Component } from '@angular/core';
@Component({
selector: 'ckeEditor',
templateUrl: './cke-component.component.html',
})
export class CKEditor {
private ckeditorContent: string;
html:string;
constructor( ) {
this.ckeditorContent = `<p>Greetings from CKEditor...</p>`;
this.html = '<script src ="https://cdn.ckeditor.com/4.7.0/standard-all/ckeditor.js"></script>';
}
}
cke-component.component.html
<p>
cke-component works!
</p>
<div>
<span [innerHTML]=" html | blogCkeScript "></span>
<ckeditor
[(ngModel)]="ckeditorContent"
[config]="{uiColor: '#a4a4a4'}"
(change)="onChange($event)"
(ready)="onReady($event)"
(focus)="onFocus($event)"
(blur)="onBlur($event)"
debounce="500">
</ckeditor>
</div>
blog-cke-script.pipe.ts
import { Pipe, PipeTransform } from '@angular/core';
import { DomSanitizer } from '@angular/platform-browser';
@Pipe({
name: 'blogCkeScript',
pure: true
})
export class BlogCkeScriptPipe implements PipeTransform {
constructor(private domSanitizer: DomSanitizer) { }
handleExternalScriptsInHtmlString(string) {
let that = this;
var parser = new DOMParser();
var scripts = parser.parseFromString(string, 'text/html').getElementsByTagName('script');
var results = [];
for (var i = 0; i < scripts.length; i++) {
var src = scripts[i].getAttribute('src');
if (src.length && results.indexOf(src) === -1) {
results.push(src);
that.addScript(src);
}
}
return results;
}
addScript(src) {
var script = document.createElement('script');
script.setAttribute('src', src);
document.body.appendChild(script);
}
transform(htmlContent: any) {
let sanitizeHtmlContent = this.domSanitizer.bypassSecurityTrustHtml(htmlContent);
this.handleExternalScriptsInHtmlString(htmlContent);
return sanitizeHtmlContent;
}
}
【问题讨论】:
-
import 'ckeditor';不是在组件的顶部工作吗?它应该绑定到具有 ckeditor 库的node_modules文件夹 -
另外,看看这些家伙做了什么:github.com/akveo/ng2-admin。他们在其组件中实现了 ckeditor,并使用自定义库使其更容易。它工作得很好。 (github.com/akveo/ng2-admin/blob/master/src/app/pages/editors/…)
-
亚历克斯!非常感谢!通过使用管理员主题查看您的答案发现了错误!