首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >动态添加span标记到<ng-content></ng-content>内链接

动态添加span标记到<ng-content></ng-content>内链接
EN

Stack Overflow用户
提问于 2016-11-04 14:55:49
回答 3查看 2K关注 0票数 1

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

代码语言:javascript
复制
import { Component, Input } from '@angular/core';

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

用户可以设置活动状态。

代码语言:javascript
复制
<ul>
    <li my-list-item [active]="true">
        <a href="#">Stackoverflow</a>
    </li>
</ul>

如果活动标志设置为true,则必须在链接中添加自定义span标记,并且应该呈现如下所示:

代码语言:javascript
复制
<ul>
    <li>
        <a href="#">
            <span class="active">Stackoverflow</span>
        </a>
    </li>
</ul>

在angular2中,建议采用什么方法来实现这一点?谢谢你的建议

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-11-04 15:33:04

我将利用以下方法:

代码语言:javascript
复制
@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 { }

柱塞实例

票数 2
EN

Stack Overflow用户

发布于 2016-11-04 15:00:50

在内部设置div,然后设置任何div内容。

代码语言:javascript
复制
<ul>
  <li my-list-item [active]="true">
    <a href="#"><div id='you_can_do_it_in_a_div'>Stackoverflow</div></a>
  </li>
</ul>

<script>
document.getElementById('you_can_do_it_in_a_div').innerHTML = 'whatever';
</script>
票数 1
EN

Stack Overflow用户

发布于 2016-11-04 15:04:44

还没测试过。

你的占位符应该是

代码语言:javascript
复制
<ng-content *ngIf="active"></ng-content>

在主html文件中

将组件修改为

代码语言:javascript
复制
    import Component from '@angular/core';

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

注意模板语法,-which与单引号(‘)-allows是不同的字符,您可以在几行代码中组合一个字符串,这使HTML更加可读性。

顺便问一下,你为什么要导入输入?

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40425703

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档