Могу ли я сгенерировать html-код в виде строки, а затем установить эту строку как значение div в машинописном тексте, используя структуру ясности (Angular 7)

Я пытаюсь сгенерировать html-код в виде строки для сетки Clarity-data-grid с помощью TS, а затем установить эту строку как значение div, но структура ясности не будет работать, если я не наберу HTML-код в файле HTML. .

this.component.nativeElement.innerHTML=this.html; -> сделать это в TS не получится. Но это работает, если я наберу все (#html ниже), он отобразит таблицу.

html: string ='';
//Generating the grid
private genGrid(data: string): void {
    let request: Object;
    if (data !== ''){
      request = JSON.parse(data);
      for(let prop in request){
        if (request.hasOwnProperty(prop))
          this.html+='<clr-dg-column [clrDgField] = "\''+prop+'\'">'+prop+'</clr-dg-column>';
      }
      for(let prop in request){
        if (request.hasOwnProperty(prop))
          this.html+='<clr-dg-cell>'+prop+'</clr-dg-cell>';
      }
    }
}
this.genGrid(someString);
this.component.nativeElement.innerHTML=this.html;

этот html-код будет сгенерирован в моем файле #html

<div class = "card-block" style = "padding: 0 10px 10px 10px;"><clr-datagrid><clr-dg-column [clrDgField] = "'productId'">productId</clr-dg-column><clr-dg-column [clrDgField] = "'productCategoryId'">productCategoryId</clr-dg-column><clr-dg-column [clrDgField] = "'productName'">productName</clr-dg-column><clr-dg-column [clrDgField] = "'countUnit'">countUnit</clr-dg-column><clr-dg-column [clrDgField] = "'manufacturer'">manufacturer</clr-dg-column><clr-dg-column [clrDgField] = "'country'">country</clr-dg-column><clr-dg-column [clrDgField] = "'description'">description</clr-dg-column><clr-dg-column [clrDgField] = "'status'">status</clr-dg-column><clr-dg-column [clrDgField] = "'createdDate'">createdDate</clr-dg-column><clr-dg-column [clrDgField] = "'createdBy'">createdBy</clr-dg-column><clr-dg-column [clrDgField] = "'modifiedBy'">modifiedBy</clr-dg-column><clr-dg-column [clrDgField] = "'modifiedDate'">modifiedDate</clr-dg-column><clr-dg-cell>productId</clr-dg-cell><clr-dg-cell>productCategoryId</clr-dg-cell><clr-dg-cell>productName</clr-dg-cell><clr-dg-cell>countUnit</clr-dg-cell><clr-dg-cell>manufacturer</clr-dg-cell><clr-dg-cell>country</clr-dg-cell><clr-dg-cell>description</clr-dg-cell><clr-dg-cell>status</clr-dg-cell><clr-dg-cell>createdDate</clr-dg-cell><clr-dg-cell>createdBy</clr-dg-cell><clr-dg-cell>modifiedBy</clr-dg-cell><clr-dg-cell>modifiedDate</clr-dg-cell>
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Angular и React для вашего проекта веб-разработки?
Angular и React для вашего проекта веб-разработки?
Когда дело доходит до веб-разработки, выбор правильного front-end фреймворка имеет решающее значение. Angular и React - два самых популярных...
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Мы провели Twitter Space, обсудив несколько проблем, связанных с последними дополнениями в Angular. Также прошла Angular Tiny Conf с 25 докладами.
Угловой продивер
Угловой продивер
Оригинал этой статьи на турецком языке. ChatGPT используется только для перевода на английский язык.
Мое недавнее углубление в Angular
Мое недавнее углубление в Angular
Недавно я провел некоторое время, изучая фреймворк Angular, и я хотел поделиться своим опытом со всеми вами. Как человек, который любит глубоко...
Освоение Observables и Subjects в Rxjs:
Освоение Observables и Subjects в Rxjs:
Давайте начнем с основ и постепенно перейдем к более продвинутым концепциям в RxJS в Angular
1
0
87
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Потому что это библиотека Angular. Он работает с контекстом Angular, и для правильной работы он должен быть составлено.

Установка его как innerHTML элемента (что, кстати, является очень плохой практикой в ​​Angular) делает его «окончательным», то есть он не будет скомпилирован в код JS.

Если вы хотите это сделать, я предлагаю вам взглянуть на динамические компоненты или Порталы CDK.

Спасибо за быстрый ответ

RukaDo 31.05.2019 09:39

не будет ли это переключаться между компонентами? можно ли изменить html 1 компонента и повторно использовать этот компонент?

RukaDo 31.05.2019 10:13

@RukaDo вы можете сделать это с условиями *ngIf

user4676340 31.05.2019 10:15

Извините, позвольте мне переформулировать мою цель, я хотел бы иметь возможность сгенерировать шаблон в виде строки, а затем назначить эту строку элементу div, чтобы изменить его содержимое. Например, у меня есть навигация с двумя вариантами A и B. Когда я нажимаю A, моя таблица будет сгенерирована с количеством столбцов ObjectA.props, когда я нажму B, моя таблица будет сгенерирована с количеством столбцов ObjectB.props. Все это на 1 странице с компонентами nav, table. Если, пожалуйста, укажите, если это не имеет смысла

RukaDo 31.05.2019 10:32

Это не имеет смысла при использовании Ангуляра. Angular не создан для такого поведения. В вашем примере ваши данные должны быть в массивах, и при нажатии на вашу навигацию измените текущий массив на тот, который соответствует выбранному элементу навигации.

user4676340 31.05.2019 10:36

Мои данные хранятся в виде объекта, и когда я нажимаю на навигацию, этот объект изменяется так, как должен. Единственная проблема заключается в том, чтобы восстановить таблицу на основе этого объекта. Я уже восстановил новый шаблон в виде строки в TS. Я просто не знаю, как переключить текущий шаблон таблицы на этот новый шаблон и скомпилировать его.

RukaDo 31.05.2019 10:39

@RukaDo, если у вас есть два объекта, у вас есть 3 переменные: obj1, obj2, currentObj. Щелчок по навигационной панели обновит значение currentObj, эффективно изменив ссылку на память, тем самым перезагрузив таблицу.

user4676340 31.05.2019 10:41

Другое дело, что я использую Clarity в качестве своего CSS-фреймворка. Мой старый код с innerHTML изменяет HTML-код, но фреймворк не работает.

RukaDo 31.05.2019 10:44
<clr-datagrid> — это компонент Angular (или, по крайней мере, веб-компонент, но после прочтения документации я увидел, что это компонент Angular), а не только какой-то CSS.
user4676340 31.05.2019 10:45

хм, так можно ли обновить содержимое clr-data-grid (html), а затем скомпилировать его? По содержанию я имею в виду изменение количества столбцов в качестве его данных, то есть совершенно другую сетку данных. Извините за мое невежество, я новичок в angular

RukaDo 31.05.2019 10:49

@RukaDo многое нужно изменить, вы должны сделать два компонента. Но да, вы можете, и опять же, это делается с помощью шаблонов.

user4676340 31.05.2019 10:53

Другие вопросы по теме