Angular 4: содержимое пользовательской директивы не отображается для innerHTML - PullRequest
0 голосов
/ 15 ноября 2018

Я пытался создать динамический компонент дерева в угловом формате 4. У меня есть массив, в котором есть данные для формирования динамического дерева.

Я пытался создать пользовательскую директиву для достижения этой цели.Вот мой код:

import { Directive,ElementRef, Input, HostListener } from '@angular/core';

@Directive({
  selector: '[appTreeView]'
})
export class TreeViewDirective {

  @Input('appTreeView') categories:any;
  @Input() config:any = {
    categoryList: null,
    children : [],
    nodeLabel : '',
    treeId : '1',
    nodeId : '12'
  };
  elRef: any;
  constructor(el: ElementRef) {
    console.log(Element);
    console.log(this.config);
    console.log(this.categories);
    this.elRef = el;
  }

  ngOnInit(){
    console.log('input : ',this.categories);
    this.elRef.nativeElement.innerHTML = '<ul>' +
    '<li *ngFor="let node in ' + this.categories + '; let indx = index">' +
      '<i class="collapsed" data-ng-show="node.' + this.config.children + '.length && node.collapsed" data-ng-click="' + this.config.treeId + '.selectNodeHead(node)"></i>' +
      '<i class="expanded" data-ng-show="node.' + this.config.children + '.length && !node.collapsed" data-ng-click="' + this.config.treeId + '.selectNodeHead(node)"></i>' +
      '<i class="normal" data-ng-hide="node.' + this.config.children + '.length"></i> ' +
      '<span data-ng-class="node.selected" data-ng-click="selectNodeLabel(node)">{{node.' + this.config.nodeLabel + '}}</span>' +
      '<div data-ng-hide="node.collapsed" data-tree-id="' + this.config.treeId + '" data-tree-model="node.' + this.config.children + '" data-node-id=' + this.config.nodeId + ' data-node-label=' + this.config.nodeLabel + ' data-node-children=' + this.config.children + '></div>' +
    '</li>' +
  '</ul>';
  }


}

В моем компоненте html:

<div [appTreeView]="categoryListArray"></div>

В компоненте ts:

import { Component, OnInit } from '@angular/core';

@Component({
  selector: 'app-tree-view-test',
  templateUrl: './tree-view-test.component.html',
  styleUrls: ['./tree-view-test.component.css']
})
export class TreeViewTestComponent implements OnInit {

  categoryListArray:any = [];
  constructor() { }

  ngOnInit() {
    this.categoryListArray = [
      { "label" : "User", "id" : "role1", "children" : [
        { "label" : "subUser1", "id" : "role11", "children" : [] },
        { "label" : "subUser2", "id" : "role12", "children" : [
          { "label" : "subUser2-1", "id" : "role121", "children" : [
            { "label" : "subUser2-1-1", "id" : "role1211", "children" : [] },
            { "label" : "subUser2-1-2", "id" : "role1212", "children" : [] }
          ]}
        ]}
      ]},
      { "label" : "Admin", "id" : "role2", "children" : [] },
      { "label" : "Guest", "id" : "role3", "children" : [] }
    ];
  }

  onCategoryClick(event){
    console.log('clicked item : ', event);
  }

}

Вот вывод, как я получаю:

Tree view error

Пожалуйста, проверьте просмотр, мой код не отображается должным образом.* ngFor все еще там, и я могу видеть символ интерполяции в моем выводе.Не знаю, почему моя пользовательская директива не работает.Вот справочный вывод консоли.

Tree view console output

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...