我有一个以<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中,建议采用什么方法来实现这一点?谢谢你的建议
发布于 2016-11-04 15:33:04
我将利用以下方法:
@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 { }发布于 2016-11-04 15:00:50
在内部设置div,然后设置任何div内容。
<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>发布于 2016-11-04 15:04:44
还没测试过。
你的占位符应该是
<ng-content *ngIf="active"></ng-content>在主html文件中
将组件修改为
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更加可读性。
顺便问一下,你为什么要导入输入?
https://stackoverflow.com/questions/40425703
复制相似问题