Angular 角度4。将Ckeditor添加到component.ts
需要帮助将CKEditor添加到我的ANGULAR 4(“@ANGULAR/core”:“^4.2.4”)组件中 如果我将Angular 角度4。将Ckeditor添加到component.ts,angular,ckeditor,Angular,Ckeditor,需要帮助将CKEditor添加到我的ANGULAR 4(“@ANGULAR/core”:“^4.2.4”)组件中 如果我将添加到index.html,这将起作用,但库非常重,这就是我尝试通过组件加载源脚本的原因 我在所有的生命周期挂钩上都试过安全标记。 如果向构造函数添加安全标记,则脚本将加载源代码,但CKEditor库在DOM中看不到源脚本 非常感谢您的帮助 源代码: cke-component.component.component.ts import { Component } from
添加到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>';
}
}
从'@angular/core'导入{Component};
@组成部分({
选择器:'ckeEditor',
templateUrl:'./cke component.component.html',
})
导出类编辑器{
私有ckeditorContent:字符串;
html:字符串;
构造函数(){
this.CKEditor content=`来自CKEditor的问候…`;
this.html='';
}
}
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>
cke组件工作!
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;
}
}
从'@angular/core'导入{Pipe,PipeTransform};
从“@angular/platform browser”导入{domsanizer};
@烟斗({
名称:“博客脚本”,
纯:真的
})
导出类BlockeScriptPipe实现PipeTransform{
构造函数(私有domsanizer:domsanizer){}
handleExternalScriptsInHtmlString(字符串){
让那=这;
var parser=新的DOMParser();
var scripts=parser.parseFromString(string,'text/html').getElementsByTagName('script');
var结果=[];
对于(var i=0;i
我们已经在angular 4项目中实现了ck编辑器,其他项目也面临同样的情况
下面是一些步骤,它们将帮助您获得一个干净的实现,而不必在index.html中添加链接
在polyfills.ts中添加此行
// used to programmatically set the configuration of the ckeditor file imports
// Note: this must stay as an import due to all of the imports happening before a statement is run
// no matter where the statement is in this file.
import './ckset';
// needed for our in place editing features
import 'ckeditor';
因此,现在在src文件夹中添加ckset.ts
文件,并将其放在下面的内容中
// needed for the configuration of ckeditor
(window as any).CKEDITOR_BASEPATH = '/assets/ckeditor/';
您的angular cli现在将尝试从资产文件夹加载ckedit,如果无法获取它们,则将失败。因此,必须配置在构建过程中将它们添加到我们的资产文件夹中
因此,将下面的代码添加到.angular cli.json
文件中
...
"outDir": "dist",
"assets": [
"assets",
"favicon.ico",
"configuration.json",
{
"glob": "{+(adapters|plugins|lang|skins)/**/*,config.js,styles.js,contents.css}",
"input": "../node_modules/ckeditor",
"output": "./assets/ckeditor"
}
],
"index": "index.html",
...
您的编辑器html将几乎相同,并确保为divarera
添加额外的插件,因为iframe会在angular4中的绑定和所有问题中创建其他问题
<div class="form-group">
<ckeditor
[(ngModel)]="text"
[config]="{extraPlugins: 'divarea' }"
formControlName="text"
debounce="500">
</ckeditor>
</div>
是的,当然您必须安装ng2 ckeditor;)首先或在您的package.json中添加“ng2 ckeditor”:“1.1.9”
npm i --save ng2-ckeditor
多亏了Alex Beugnet和github.com/akveo/ng2-admin的代码,才找到了解决方案 1)
npm安装--保存ckeditor
(它将使用ckeditor库安装模块)
2) 创建ckeditor.loader.ts并在组件文件夹中添加一个加载器(如下所示)
ckeditor.loader.ts:
window['CKEDITOR_BASEPATH'] = '//cdn.ckeditor.com/4.6.0/full/';
3) 在cke component.component.ts导入模块
import './ckeditor.loader';
import 'ckeditor';
4) 删除所有未使用的代码
谢谢 不
导入'ckeditor'代码>在组件顶部工作?它应该绑定到包含ckeditor lib的节点\u modules
文件夹。另外,看看这些家伙做了什么:。他们在他们的组件中实现了一个ckeditor,并使用一个自定义库来简化它。它工作得很好。亚历克斯!非常感谢!发现错误,通过查看你的答案与管理主题!您在package.json中有作为依赖项的ckeditor,对吗?@AlexBeugnet,@Egor我想使用本地下载的ckeditor文件,对于ckeditor\u BASEPATH
您可以建议如何做。。。我收到错误类型错误:如果我使用本地路径,则无法设置未定义的属性“dir”
错误您看到NG2 admin是如何做到的吗?它在这方面工作正常
import './ckeditor.loader';
import 'ckeditor';