2017-03-07 2 views
1

내 응용 프로그램에 TinyMce를 구현하려고합니다. 음, tinymce는 괜찮아 보이지만, 나는 tinymce 페이지에서 다른 페이지로 갈 때 아래와 같이 에러를 발생시킵니다. 코드 줄에서 무엇이 누락 될 수 있습니까? 감사TInyMce in Angular 2

오류

Uncaught (in promise): TypeError: elem is null 

[650]/[email protected]://localhost:4200/main.bundle.js:1794:9 

anonymous/[email protected]/AppModule/EmailComponent/wrapper.ngfactory.js:12:3 

부품 ID와

import { Component, ElementRef, OnInit, EventEmitter, Output, Inject, ComponentRef } from '@angular/core'; 
import { Http } from '@angular/http'; 

declare var tinymce: any; 

@Component({ 
    selector: 'editor', 
    template: `<div id="tinyFormGroup" class="form-group"> 
    <div class="hidden"> 
     <textarea id="baseTextArea">{{htmlContent}}</textarea> 
    </div> 
</div>`, 
    inputs: ['mceContent'], 
    outputs: ['contentChanged'] 
}) 

// source of this module - 
// http://www.unitydatasystems.com/blog/2015/12/16/angular-2-tinymce-wysiwyg-editor/ 

export class EmailComponent { 

    private elementRef: ElementRef; 
    private elementID: string; 
    private htmlContent: string; 

    public contentChanged: EventEmitter<any>; 

    constructor(@Inject(ElementRef) elementRef: ElementRef) 
    { 
     this.elementRef = elementRef; 

     var randLetter = String.fromCharCode(65 + Math.floor(Math.random() * 26)); 
     var uniqid = randLetter + Date.now(); 

     this.elementID = 'tinymce' + uniqid; 
     this.contentChanged = new EventEmitter(); 
    } 

    ngAfterViewInit() 
    { 
     //Clone base textarea 
     var baseTextArea = this.elementRef.nativeElement.querySelector("#baseTextArea"); 
     var clonedTextArea = baseTextArea.cloneNode(true); 
     clonedTextArea.id = this.elementID; 

     var formGroup = this.elementRef.nativeElement.querySelector("#tinyFormGroup"); 
     formGroup.appendChild(clonedTextArea); 

     //Attach tinyMCE to cloned textarea 
     tinymce.init(
      { 
       mode: 'exact', 
       height: 500, 
       theme: 'modern', 
       plugins: [ 
        'advlist autolink lists link image charmap print preview anchor', 
        'searchreplace visualblocks code fullscreen', 
        'insertdatetime media table contextmenu paste code' 
       ], 
       toolbar: 'insertfile undo redo | styleselect | bold italic | alignleft aligncenter alignright alignjustify | bullist numlist outdent indent | link image', 
       elements: this.elementID, 
       setup: this.tinyMCESetup.bind(this) 
      } 
     ); 
    } 

    ngOnDestroy() { 
     //destroy cloned elements 
     tinymce.get(this.elementID).remove(); 

     var elem = document.getElementById(this.elementID); 
     elem.parentElement.removeChild(elem); 
    } 

    tinyMCESetup(ed) { 
     ed.on('keyup', this.tinyMCEOnKeyup.bind(this)); 
    } 

    tinyMCEOnKeyup(e) { 
     this.contentChanged.emit(tinymce.get(this.elementID).getContent()); 
    } 

    set mceContent(content) { 
     this.htmlContent = content; 
    } 
} 

답변

1

요소가 존재 ELEM보다 = NULL이 아닌는 HTMLElement

var elem = document.getElementById(this.elementID); 
없음 "this.elementID"