用angular2实现tinymce

托尼

我一直在关注这个视频:https : //www.youtube.com/watch?v= 0IXelrVEoWI和相应的github来源:https : //github.com/tabvn/angular-blog

它非常适合创建新内容,但是当尝试在同一编辑器中加载和编辑现有内容时,我遇到了一些问题。

我的html dom元素看起来像这样:

 <div class="row">
    <div class="form-group col-lg-10">
      <label for="description">description:</label>
      <text-editor [value]="defaultBodyValue" [elementId]="'description'" (onEditorKeyup)="onBodyTextEditorKeyUp($event)"></text-editor>
    </div>
  </div>

在我的组件中,我从ngOnInit()调用此方法:

  getDescription(): void {
    let id;
    this.route.params.forEach((params: Params) => {
      id = +params['id'];
    })
    this.descService.getDesc(id).then(desc => this.desc = desc);
    this.defaultBodyValue = "asd";
  }

为了测试目的,我已经将描述硬编码为“ asd”。

我的editor.component.ts源看起来像这样:

export class EditorComponent implements OnInit, AfterViewInit, OnDestroy, OnChanges {


  @Input() elementId: string;
  @Input() value: any = "";
  @Output() onEditorKeyup: EventEmitter<any> = new EventEmitter<any>();

  baseURL: string = '/';

  constructor() {
  }


  ngOnInit() {
  }


  editor;

  ngAfterViewInit() {
    tinymce.init({
      selector: '#' + this.elementId,
      plugins: ['link', 'paste', 'table', 'lists', 'hr', 'emoticons', 'advlist'],
      skin_url: this.baseURL + 'assets/skins/lightgray',
      setup: editor => {
        this.editor = editor;
        editor.on('keyup', () => {
          const content = editor.getContent();
          this.onEditorKeyup.emit(content);
        });
      },
    });
  }

  ngOnDestroy() {
    tinymce.remove(this.editor);
  }


  didSetValue: boolean = false;


  ngOnChanges(){
    console.log(this.value);
    console.log("TEST: " + this.editor);
    if(!isNullOrUndefined(this.editor) && this.value !== "" && !this.didSetValue){

      console.log(this.value);
      this.didSetValue = true;
      this.editor.setContent(this.value);
    }
  }
}

在创建新内容时,它可以完美工作,但是当我尝试编辑内容时,它将以下内容记录到控制台:

asd
editor.component.ts:55 TEST: undefined

更新了ngAfterViewInit()函数:

  ngAfterViewInit() {
    tinymce.init({
      selector: '#' + this.elementId,
      plugins: ['link', 'paste', 'table', 'lists', 'hr', 'emoticons', 'advlist'],
      skin_url: this.baseURL + 'assets/skins/lightgray',
      setup: editor => {
        editor = editor;
        editor.on('keyup', () => {
          const content = editor.getContent();
          this.onEditorKeyup.emit(content);
        });
      },
    });
  }
迈克尔·弗罗明(Michael Fromin)

我认为问题在于this您尝试引用editor变量时会用到它在设置功能中,您可以进行以下分配:

this.editor = editor;

...我相信该this函数内部将引用setup函数的上下文。当安装程序运行完成时,您没有editor为EditorComponent中定义变量分配任何内容(但在安装程序函数之外)。

然后,当您尝试editorngOnChanges方法中引用变量时,它现在引用了EditorComponent中的变量,但由于您从未对其进行初始化,因此其值为undefined

编辑:

如果您具有元素的ID(就像您在组件的一个变量中一样),则可以使用tinymce.get()原始文本区域的ID并将其传递给它-应该会为您提供该ID的特定TinyMCE实例。

我相信你可以做这样的事情:

tinymce.get(this.elementId)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

angular2所见即所得tinymce实现和2向绑定

来自分类Dev

在angular2中实现主题

来自分类Dev

在angular2中实现向导?

来自分类Dev

Angular2中的JqCloud实现

来自分类Dev

angular2在AuthGuard中实现接口

来自分类Dev

YSlow 的 Angular2 实现性能建议

来自分类Dev

Angular2/TinyMce 编辑器中的翻译选项

来自分类Dev

在angular2中实现无限滚动器

来自分类Dev

在Angular2中实现动态路由(打字稿)

来自分类Dev

如何初始化angular2实现组件?

来自分类Dev

如何初始化angular2实现组件?

来自分类Dev

如何使用Dart在angular2中实现动画

来自分类Dev

模态关闭时如何注册(angular2实现)

来自分类Dev

为什么angular2用这种方式声明接口?

来自分类Dev

Angular2:用组件的模板替换宿主元素

来自分类Dev

用angular2在Dart单例中注入

来自分类Dev

用angular2在Dart单例中注入

来自分类Dev

不知道如何使用angular2类中的接口实现枚举

来自分类Dev

如何在Dart中使用Angular2实现自定义验证器?

来自分类Dev

Angular2 RC1实现加载指标的最佳方法

来自分类Dev

Angular2:如何基于外部值实现特定路由配置列表的选择性

来自分类Dev

如何在Angular2 / 4/5中实现自定义异步验证器

来自分类Dev

如何在Angular2中实现“类别过滤器”

来自分类Dev

不知道如何使用angular2类中的接口实现枚举

来自分类Dev

如何使用Firebase列表/ FirebaseListObservable在Angular2中实现拖放

来自分类Dev

如何在sail.js中实现angular2材料?

来自分类Dev

Angular2:滚动时如何实现内容渐进式加载?

来自分类Dev

实现 ngOnChange 以捕获 Angular2 中的旧值和当前值

来自分类Dev

一个 PrimeNG Angular2 组件的实现问题,带 DynamicDialogRef 和不带 DynamicDialogRef

Related 相关文章

热门标签

归档