为了账号安全,请及时绑定邮箱和手机立即绑定

将某些单词与组件包装在一个内容可编辑的 div 中

将某些单词与组件包装在一个内容可编辑的 div 中

幕布斯6054654 2022-06-05 16:36:34
我正在尝试替换来自 contenteditable div 的动态文本,通过正则表达式对单词进行排序并用角度组件包装它们。到目前为止,我已经找到了一种用组件标记替换该文本的方法,但我似乎无法使组件工作。相反,它只是将组件显示为空白。如何手动引导/启动这些动态添加的组件?app.component.html:<div #from_field (keyup)="textarea_keyup_event(from_field)" contenteditable="true">  This text can be edited by the user.  If the user writes the 'moo' word, it should be wrapped with "replacer" component.</div>app.component.ts:function getFormattedText(text) {    var parts = text.split(/(\bmoo+\b)/gi);    for (var i = 1; i < parts.length; i += 2) {      parts[i] = '<app-replacer key="'+ i + '">' + parts[i] + '</app-replacer>';    }    return parts.join('');}textarea_keyup_event(element) {  const preFormattedText = element.textContent;  element.innerHTML = getFormattedText(preFormattedText);}// if you write:// "I am a cow; cows say moo. MOOOOO."// it replaces the DOM with this:// "I am a cow; cows say <app-replacer key="1">moo</app-replacer>. <app-replacer key="3">MOOOOO</app-replacer>."// but the app-replacer tag doesn't fire up the component.
查看完整描述

1 回答

?
繁花如伊

TA贡献2012条经验 获得超12个赞

我会在 Web 组件的帮助下做到这一点。


Angular 有一个@angular/elements库,允许我们从 Angular 组件创建 Web 组件。


app.module.ts


import { createCustomElement } from '@angular/elements';


@NgModule({

  imports: [

    BrowserModule

  ],

  declarations: [

    AppComponent,

    ReplacerComponent

  ],

  entryComponents: [ReplacerComponent],

  bootstrap: [AppComponent]

})

export class AppModule {

  constructor(private injector: Injector) {

    if (!customElements.get('app-replacer')) {

      const btnComp = createCustomElement(ReplacerComponent, {

        injector: this.injector

      });

      customElements.define('app-replacer', btnComp);

    }

  }

}

一旦您将其定义ReplacerComponent为 Web 组件app-replacer,您的 contenteditable div 中的所有标签都将自动呈现为组件。


查看完整回答
反对 回复 2022-06-05
  • 1 回答
  • 0 关注
  • 109 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号