Stack Overflow is a community of 4.7 million programmers, just like you, helping each other.

Join them; it only takes a minute:

Sign up
Join the Stack Overflow community to:
  1. Ask programming questions
  2. Answer and help your peers
  3. Get recognized for your expertise

I am trying to create a emangular comnponente 2 using typescript . The 'm trying to create the component using document.createElement to create the dial of my component however it is not generated.

       import {Directive, Component, bootstrap} from 'angular2/angular2';
import {ToolbarGroup} from './toolbar';

@Component({
  selector: 'option-menu',
  templateUrl: 'templates/options.html'
})

class OptionMenu {
  ToolbarGroup = new ToolbarGroup;
  constructor() {
  }
  /**
   * @argument Node for return this count of child
   * @returns count of child in a node
   */
  public getChildCount(node) {
    var number = node.childNodes.length;
    return number;
  }

  public createCols(colNumber, rowName, className) {

    for (var i = 0; i < colNumber; i++) {
      var col = document.createElement("DIV");
      var rowID = rowName.getAttribute('id');
      rowID += 'col' + i;
      col.setAttribute('id', rowID);
      console.log(col.getAttribute('id'));
      col.setAttribute("class", className);



      var textnode = document.createElement("DIV");
      var pading = document.createElement("br");
      var toobar = document.createElement("toolbar");



      //col.appendChild(this.createCloseButton(col));
      col.appendChild(toobar);
      col.appendChild(pading);


      textnode.setAttribute('id', 'insideCol' + col.getAttribute('id'));
      textnode.setAttribute('class', 'insideColConttent');

      textnode.setAttribute("ondrop", "drop2(event,insideCol" + col.getAttribute('id') + ")");
      textnode.setAttribute("ondragover", "allowDrop(event)");

      col.appendChild(textnode);

      rowName.appendChild(col);
    }

    return rowName;
  }


  public createRows(colNumber, selectorName) {

    var row = document.createElement("DIV");
    row.setAttribute("class", "row");

    if (colNumber == 1) {
      var rowlID = 'rowL1Child' + this.getChildCount(selectorName);
      row.setAttribute("id", rowlID);

      row = this.createCols(1, row, 'col-md-12 coluna-editor');
    } else if (colNumber == 2) {
      var rowlID = 'rowL2Child' + this.getChildCount(selectorName);
      row.setAttribute("id", rowlID);

      row = this.createCols(2, row, 'col-md-6 coluna-editor');
    } else if (colNumber == 3) {
      var rowlID = 'rowL3Child' + this.getChildCount(selectorName);
      row.setAttribute("id", rowlID);

      row = this.createCols(3, row, 'col-md-4 coluna-editor');
    } else if (colNumber == 4) {
      var rowlID = 'rowL4Child' + this.getChildCount(selectorName);
      row.setAttribute("id", rowlID);

      row = this.createCols(4, row, 'col-md-3 coluna-editor');
    }

    return row;
  }


  createOneLineOneColumn() {
    var el = document.getElementById('content-into-page');
    el.appendChild(this.createRows(1, el));
  }
  createOneLineTowColumn() {
    var el = document.getElementById('content-into-page');
    el.appendChild(this.createRows(2, el));
  }
  createOneLineThreeColumn() {
    var el = document.getElementById('content-into-page');
    el.appendChild(this.createRows(3, el));
  }
  createOneLineFourColumn() {
    var el = document.getElementById('content-into-page');
    el.appendChild(this.createRows(4, el));
  }

  public createCloseButton(colID) {

    var btn = document.createElement("A");
    btn.setAttribute('href', 'javascript:void(0)');
    btn.setAttribute('class', 'btn btn-flat btn-default mdi-navigation-close');
    btn.setAttribute('onclick', 'cleanCol(' + colID.getAttribute('id') + ')');
    return btn;
  }
  public removeRow(rowId) {

    var btn = document.createElement("A");
    btn.setAttribute('href', 'javascript:void(0)');
    btn.setAttribute('class', 'btn btn-flat btn-default mdi-navigation-close');
    btn.setAttribute('onclick', 'removeRow(' + rowId.getAttribute('id') + ')');
    return btn;
  }

  saveContent() {
    var content = document.getElementById('content-into-page');
   var json = this.mapDOM(content, true);
    //console.log(json);

    //print();
JSON.stringify(json)
console.log(json); 
 }


  public mapDOM(element, json) {
    var treeObject = {};

    //Recursively loop through DOM elements and assign properties to object
    function treeHTML(element, object) {
        object["type"] = element.nodeName;
        var nodeList = element.childNodes;
        if (nodeList != null) {
            if (nodeList.length) {
                object["content"] = [];
                for (var i = 0; i < nodeList.length; i++) {
                    if (nodeList[i].nodeType == 3) {
                        object["content"].push(nodeList[i].nodeValue);
                    } else {
                        object["content"].push({});
                        treeHTML(nodeList[i], object["content"][object["content"].length -1]);
                    }
                }
            }
        }
        if (element.attributes != null) {
            if (element.attributes.length) {
                object["attributes"] = {};
                for (var i = 0; i < element.attributes.length; i++) {
                    object["attributes"][element.attributes[i].nodeName] = element.attributes[i].nodeValue;
                }
            }
        }
    }
    treeHTML(element, treeObject);

    return (json) ? JSON.stringify(treeObject) : treeObject;
}  

}

bootstrap(OptionMenu,[ToolbarGroup]);

And the component you want to create :

 import {Inject, Injectable, Directive, View, Component, bootstrap} from 'angular2/angular2';

    @Component({
      selector: 'toolbar',
      templateUrl: 'templates/toolbar.html'

    })
    export class ToolbarGroup {


    }
    bootstrap(ToolbarGroup);
share|improve this question

You shouldn't do this. Do you know that angular uses virtual DOM. And all changes on DOM tree needs to be done via special API see ElementRef. Why you didn't put all the code into html template and you are creating it inside component?

share|improve this answer

I needed to generate the elements then dynamically resolved as follows:

<div class="ui grid contructPage">
    <div class="two wide column">
        <div class="ui vertical fluid tabular menu">
            <a href="javascript:void(0)"><h4><i class="sidebar icon"></i></h4></a>
            <h4 class="ui horizontal divider header">
                <i class="tag icon"></i>
                Colunas
                </h4>
            <a href="javascript:void(0)" (click)="createOneLineOneColumn()" class="ui primary button item">|</a>
            <a href="javascript:void(0)" (click)="createOneLineTowColumn()" class="ui primary button item">| |</a>
            <a href="javascript:void(0)" (click)="createOneLineThreeColumn()" class="ui primary button item">| | |</a>
            <!--<a href="javascript:void(0)" (click)="createOneLineFourColumn()" class="ui primary button item">| | | |</a>-->

            <h4 class="ui horizontal divider header">
                <i class="tag icon"></i>
                        Opções
            </h4>
            <a id="drag1" onclick="preview()" href="javascript:void(0)" class="ui primary button item">Preview<i class="unhide icon"></i></i></a>

            <a id="drag1" (click)="saveContent()" href="javascript:void(0)" class="ui primary button item">Save<i class="disk outline icon"></i></a>

            <a id="drag2" (click)="destroy()" href="javascript:void(0)" class="ui primary red button item">Clean<i class="trash outline icon"></i></a>


        </div>
    </div>

    <div class="thirteen wide stretched column">
        <div class="ui segment">
            <div class="ui equal width grid container " id="{{[DVEContainer.componentId]}}" *ng-for="#page of DVEContainer.components;#i=index">

                <div class="column insideColConttent title" id="{{[page.componentId]}}" *ng-for="#page of page.components;">
                    <div class="ui buttons">
                        <button href="javascript:void(0)" class="ui button" (click)="createVideo(page)"><i class="film icon"></i></button>
                        <button href="javascript:void(0)" class="ui button" (click)="createImage(page)"><i class="photo icon"></i></button>
                        <button href="javascript:void(0)" class="ui button" (click)="createText(page)" onclick="initEditor()"><i class="write icon"></i></button>
                        <button href="javascript:void(0)" class="ui button" (click)=" removeElements(page)"><i class="erase icon"></i></button>
                    </div>
                    <div *ng-for="#page of page.components;">
                        <div *ng-if="[page.getHtmSelector()] =='textarea'">
                            <text-component>

                            </text-component>

                        </div>
                        <div *ng-if="[page.getHtmSelector()] =='img'">
                            <input type="text" [(ng-model)]="page.href" laceholder="Img Source" /> 
                            <img class="ui image" src="{{[page.href]}}" />
                        </div>
                        <div *ng-if="[page.getHtmSelector()] =='video'">
                            <input type="text" [(ng-model)]="page.href" (keyup)="showVideo(page)" onkeyup="resizeIframe()" placeholder="Video Source"
                            />

                            <br>

                            <iframe  src="{{[page.href]}}">
                            </iframe>
                        </div>
                    </div>
                </div>

            </div>

        </div>
    </div>
</div>
<div class="preview ui grid previewPage" style="display: none;">
<div class="ui grid">
  <div class="sixteen wide column">
      <a id="drag1" onclick="preview()" href="javascript:void(0)" class="ui primary button item right floated">Preview<i class="unhide icon"></i></i></a>
  </div>  
</div>

    <div class="ui equal width grid container " id="{{[DVEContainer.componentId]}}" *ng-for="#page of DVEContainer.components;#i=index">

        <div class="column insideColConttent title" id="{{[page.componentId]}}" *ng-for="#page of page.components;">

            <div *ng-for="#page of page.components;">
                <div *ng-if="[page.getHtmSelector()] =='textarea'">
                    <p>
                        {{[page.value]}}
                    </p>
                </div>
                <div *ng-if="[page.getHtmSelector()] =='img'">
                    <img class="ui image" src="{{[page.href]}}" />
                </div>
                <div *ng-if="[page.getHtmSelector()] =='video'">
                    <iframe src="{{[page.href]}}">
                    </iframe>
                </div>
            </div>
        </div>

    </div>

</div>

And main class:

import {Directive, Component, bootstrap, Inject, View, NgFor, NgIf, EventEmitter,
CORE_DIRECTIVES, FORM_DIRECTIVES, NgClass, NgStyle} from 'angular2/angular2';
import {Http, Response, HTTP_PROVIDERS, Headers} from 'angular2/http';
import{TextComponentDirective} from './Directives/TextComponentDirective';

//import {NgGrid,NgGridItem} from './Directives/NgGrid';
//API
import {DVE} from './API/DVE';


@Component({
  selector: 'dve-page',
  templateUrl: 'templates/DvePage.html',
  inputs: ['DVEContainer: DVEContainer', 'page:page', 'col:col', 'imagem:imagem', 'video:video'],
  directives: [NgFor, NgIf, NgClass, NgStyle, CORE_DIRECTIVES, FORM_DIRECTIVES,TextComponentDirective],

})




class OptionMenu {
  bosta = new DVE.Core.Plugin.bostaBugada();



  DVEContainer: DVE.Core.Definitions.Container;
  DVEtoolBar: DVE.Core.Plugin.Toolbar;
  DVEPage: DVE.Core.Definitions.Container;

  RowFactory: DVE.Core.Plugin.ContainerFactory;


  constructor() {

    this.DVEContainer = new DVE.Core.Definitions.Container();
    this.DVEContainer.setHtmSelector('row');


    let colL1 = new DVE.Core.Definitions.Container();
    colL1.setHtmSelector('col');
    this.DVEContainer.AddComponent(colL1);

    let colL2 = new DVE.Core.Definitions.Container();
    colL2.setHtmSelector('col');
    this.DVEContainer.AddComponent(colL2);



  }



  createOneLineOneColumn(): void {

    let rowL1 = new DVE.Core.Definitions.Container();
    let colOf = new DVE.Core.Definitions.Container();

    rowL1.setHtmSelector(DVE.Core.Plugin.Constants.ROW);
    rowL1.setComponentId('row1L' + DVE.Utils.DveUtils.generateUiID());

    colOf.setHtmSelector(DVE.Core.Plugin.Constants.COL);
    colOf.setComponentId('colOf-' + rowL1.getComponentId());
    colOf.setClasses(DVE.Core.Plugin.Constants.colMd12);
    rowL1.AddComponent(colOf);

    this.DVEContainer.AddComponent(rowL1);
  }






  createOneLineTowColumn(): void {
    let rowL2 = new DVE.Core.Definitions.Container();
    rowL2.setHtmSelector(DVE.Core.Plugin.Constants.ROW);
    rowL2.setComponentId('row2L' + DVE.Utils.DveUtils.generateUiID());

    let colOf = new DVE.Core.Definitions.Container();
    let col2Of = new DVE.Core.Definitions.Container();

    colOf.setHtmSelector(DVE.Core.Plugin.Constants.COL);
    colOf.setComponentId('col1Of-' + rowL2.getComponentId());
    colOf.setClasses(DVE.Core.Plugin.Constants.colMd6);

    col2Of.setHtmSelector(DVE.Core.Plugin.Constants.COL);
    col2Of.setComponentId('col2Of-' + rowL2.getComponentId());
    col2Of.setClasses(DVE.Core.Plugin.Constants.colMd6);
    rowL2.AddComponent(colOf);
    rowL2.AddComponent(col2Of);
    this.DVEContainer.AddComponent(rowL2);
  }
  createOneLineThreeColumn(): void {
    let rowL3 = new DVE.Core.Definitions.Container();
    rowL3.setHtmSelector(DVE.Core.Plugin.Constants.ROW);
    rowL3.setComponentId('row3L' + DVE.Utils.DveUtils.generateUiID());

    let colOf = new DVE.Core.Definitions.Container();
    let col2Of = new DVE.Core.Definitions.Container();
    let col3Of = new DVE.Core.Definitions.Container();

    colOf.setHtmSelector(DVE.Core.Plugin.Constants.COL);
    colOf.setComponentId('col1Of-' + rowL3.getComponentId());
    colOf.setClasses(DVE.Core.Plugin.Constants.colMd4);

    col2Of.setHtmSelector(DVE.Core.Plugin.Constants.COL);
    col2Of.setComponentId('col2Of-' + rowL3.getComponentId());
    col2Of.setClasses(DVE.Core.Plugin.Constants.colMd4);

    col3Of.setHtmSelector(DVE.Core.Plugin.Constants.COL);
    col3Of.setComponentId('col3Of-' + rowL3.getComponentId());
    col3Of.setClasses(DVE.Core.Plugin.Constants.colMd4);

    rowL3.AddComponent(colOf);
    rowL3.AddComponent(col2Of);
    rowL3.AddComponent(col3Of);

    this.DVEContainer.AddComponent(rowL3);




  }
  createOneLineFourColumn(): void {
    let rowL4 = new DVE.Core.Definitions.Container();
    rowL4.setHtmSelector(DVE.Core.Plugin.Constants.ROW);
    rowL4.setComponentId('row4L' + DVE.Utils.DveUtils.generateUiID());

    let colOf = new DVE.Core.Definitions.Container();
    let col2Of = new DVE.Core.Definitions.Container();
    let col3Of = new DVE.Core.Definitions.Container();
    let col4Of = new DVE.Core.Definitions.Container();

    colOf.setHtmSelector(DVE.Core.Plugin.Constants.COL);
    colOf.setComponentId('col1Of-' + rowL4.getComponentId());
    colOf.setClasses(DVE.Core.Plugin.Constants.colMd3);

    col2Of.setHtmSelector(DVE.Core.Plugin.Constants.COL);
    col2Of.setComponentId('col2Of-' + rowL4.getComponentId());
    col2Of.setClasses(DVE.Core.Plugin.Constants.colMd3);

    col3Of.setHtmSelector(DVE.Core.Plugin.Constants.COL);
    col3Of.setComponentId('col3Of-' + rowL4.getComponentId());
    col3Of.setClasses(DVE.Core.Plugin.Constants.colMd3);

    col4Of.setHtmSelector(DVE.Core.Plugin.Constants.COL);
    col4Of.setComponentId('col4Of-' + rowL4.getComponentId());
    col4Of.setClasses(DVE.Core.Plugin.Constants.colMd3);

    rowL4.AddComponent(colOf);
    rowL4.AddComponent(col2Of);
    rowL4.AddComponent(col3Of);
    rowL4.AddComponent(col4Of);

    this.DVEContainer.AddComponent(rowL4);

  }


  public createText(model: DVE.Core.Definitions.Container): void {
    let textModel = new DVE.Core.Plugin.Text();
    if (model.getComponents().length < 1) {

      //console.log(model);
      textModel.setComponentId('text-node-of-' + model.getComponentId());
      textModel.setClasses('textElement');
      textModel.setHtmSelector('textarea');
      model.AddComponent(textModel);
      //console.log(model);
    } else {
      this.removeElements(model);
      textModel.setComponentId('text-node-of-' + model.getComponentId());
      textModel.setClasses('textElement');
      textModel.setHtmSelector('textarea');
      model.AddComponent(textModel);

    }






  }
  public createImage(model: DVE.Core.Definitions.Container): void {
    let imageModel = new DVE.Core.Plugin.Image();
    if (model.getComponents().length < 1) {

      imageModel.setComponentId('image-node-of-' + model.getComponentId());
      imageModel.setClasses('imageClass');
      imageModel.setHtmSelector('img');
      imageModel.setHref('');
      model.AddComponent(imageModel);
    } else {
      this.removeElements(model);

      imageModel.setComponentId('image-node-of-' + model.getComponentId());
      imageModel.setClasses('imageClass');
      imageModel.setHtmSelector('img');
      model.AddComponent(imageModel);
    }
  }

  public createVideo(model: DVE.Core.Definitions.Container): void {
    let videoModel = new DVE.Core.Plugin.Video();
    if (model.getComponents().length < 1) {

      videoModel.setComponentId('video-node-of' + model.getComponentId());
      videoModel.setHtmSelector('video');
      videoModel.setHref('');
      model.AddComponent(videoModel);
    } else {
      this.removeElements(model);
      videoModel.setComponentId('video-node-of' + model.getComponentId());
      videoModel.setHtmSelector('video');
      model.AddComponent(videoModel);

    }
  }

  public renderImage(modelId: DVE.Core.Plugin.Image): void {
    console.log(this.bosta.imagem);
    modelId.setHref(this.bosta.imagem);
  }

  public showVideo(modelId: DVE.Core.Plugin.Video) {
    modelId.setHref(modelId.getHref().replace("watch?v=", "v/"));
  }
  private change(modelId): void {

  }


  public renderVideo(): void {

  }


  public removeElements(model: DVE.Core.Definitions.Container) {
    model.removeComponents();
  }

  public removeRow(rowId) {


  }

  saveContent(): void {
    console.log(JSON.stringify(this.DVEContainer));
    alert(JSON.stringify(this.DVEContainer));

  }


  /*public preview() {
    let content = document.getElementById('content-into-page');
    window.open();
  }*/

  public destroy() {
    this.DVEContainer = new DVE.Core.Definitions.Container();
    this.DVEContainer.setHtmSelector('row');
  }



  public watcher(type, param): void {
    let fetch, Zone;
    switch (type) {
      case 'btn-col':



        break;
      case 'btn-create':
        console.log(param);
        break;
      default: console.log(param);
        break;
    }
  }



}

bootstrap(OptionMenu);

share|improve this answer

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.