gpt4 book ai didi

Angular - 如何从指令访问和替换 innerHTML

转载 作者:行者123 更新时间:2023-12-03 16:41:06 28 4
gpt4 key购买 nike

我正在尝试创建一个指令来修改元素的 innerHTML通过添加指向以 @ 开头的子字符串的链接象征。

这是我迄今为止尝试过的,

linkify.directive.ts

  constructor(private elementRef: ElementRef, private renderer: Renderer2) { 
let elementText = this.elementRef.nativeElement.innerHTML;
// elementText = '@user mentioned you';
console.log(`Element Text: ${elementText}`);
this.renderer.setProperty(this.elementRef.nativeElement, 'innerHTML', this.stylize(elementText));
}

我是这样用的
<p linkify> Hey @user check this out! </p>

在调试时,我做了以下观察,
  • this.elementRef.nativeElement.innerHTML总是有一个空字符串。
  • this.renderer.setProperty(this.elementRef.nativeElement, 'innerHTML', 'something');附加 something到元素文本的开头而不是替换。

  • 问题一:如何访问 innerHTML一个元素?

    问题2:如何从指令设置元素的innerHTML?

    Stackblitz demonstrating the problem

    我尝试了 Renderer2 的文档,但这对我没有帮助。

    最佳答案

    正如@bryan60 所建议的那样,执行此操作的理想方法是创建管道而不是指令。

    这是我最终创建的管道,

    linkify.pipe.ts

    import { Pipe, PipeTransform } from '@angular/core';
    import { DomSanitizer } from '@angular/platform-browser';

    @Pipe({
    name: 'linkify'
    })
    export class LinkifyPipe implements PipeTransform {

    constructor(private _domSanitizer: DomSanitizer) {}

    transform(value: any, args?: any): any {
    return this._domSanitizer.bypassSecurityTrustHtml(this.stylize(value));
    }

    private stylize(text: string): string {
    let stylizedText: string = '';
    if (text && text.length > 0) {
    for (let t of text.split(" ")) {
    if (t.startsWith("@") && t.length>1)
    stylizedText += `<a href="#${t.substring(1)}">${t}</a> `;
    else
    stylizedText += t + " ";
    }
    return stylizedText;
    }
    else return text;
    }

    }

    用法:
    <p [innerHTML]="sample | linkify"></p>

    Demo Stackblitz

    关于Angular - 如何从指令访问和替换 innerHTML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48451257/

    28 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com