javascript - 动态添加 span 标签到 <ng-content></ng-content> 内的链接

标签 javascript angular

我有一个带有 <ng-content> 的自定义列表项组件作为模板:

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

@Component({
    selector: '[my-list-item]',
    template: '<ng-content></ng-content>'
})
export class MyListItemComponent {
    @Input() active = false; 
}

用户可以设置激活状态。

<ul>
    <li my-list-item [active]="true">
        <a href="#">Stackoverflow</a>
    </li>
</ul>

如果事件标志设置为 true,我必须在链接内添加一个自定义 span 标签,它应该像这样呈现:

<ul>
    <li>
        <a href="#">
            <span class="active">Stackoverflow</span>
        </a>
    </li>
</ul>

在 angular2 中推荐的方法是什么来完成这个? 感谢您的任何建议

最佳答案

我会利用以下方法:

@Directive({ selector: 'li>a' })
export class MyAnchorDirective {
  constructor(private elRef: ElementRef, private rendered: Renderer) { }
  public wrapContent() {
    var el = this.elRef.nativeElement;
    this.rendered.setElementProperty(el, 'innerHTML', 
       `<span class="active">${el.innerHTML}</span>`);
  }
}

@Component({
  selector: '[my-list-item]',
  template: '<ng-content></ng-content>'
})
export class MyListItemComponent {
  @Input() active = false;
  @ContentChild(MyAnchorDirective) anchor: MyAnchorDirective;
  ngAfterContentInit() {
    if (this.active && this.anchor) {
      this.anchor.wrapContent();
    }
  }
}

@Component({
  selector: 'my-app',
  template: `
    <ul>
      <li my-list-item [active]="true">
          <a href="#">Stackoverflow</a>
      </li>
      <li my-list-item [active]="false">
          <a href="#">Stackoverflow2</a>
      </li>
    </ul>`
})
export class AppComponent { }

Plunker Example

关于javascript - 动态添加 span 标签到 <ng-content></ng-content> 内的链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40425703/

相关文章:

angular - 如何将表单控件值传递给 Angular 5 react 表单中的自定义验证器函数的参数

javascript - 使用 JavaScript 或 Jquery 显示选项下拉列表中的项目

javascript - AngularJS - 从指令获取属性值

javascript - 对 JavaScript 中嵌套函数变量作用域的澄清

angular - 模板解析错误 : 'mat-sidenav-container' is not a known element

javascript - 是否有 Angular 8 相当于 Angular 1 $filter ('orderBy' )

javascript - 如何使用 forEach 函数将值推送到变量中

javascript - 可选的 Promise API

angular - 编译 Angular 5 项目时 typescript 中的随机错误

angular - 如何在嵌套表单数组中选择全部和取消选择全部?