【问题标题】:Angular2: replace component element entirelyAngular2:完全替换组件元素
【发布时间】:2016-07-19 12:04:49
【问题描述】:

我环顾四周,似乎找不到正确的答案...这应该是非常微不足道的事情...并且到处都有记录...似乎找不到它...

所以,我有一个非常非常简单的组件/指令,称为 navItem

我是这样称呼它的

<ul>
    <nav-item route="/aboutus">About us</nav-item>
    <nav-item route="/contactUs">Contact us</nav-item>
</ul>

这就是它里面的内容(nav-item.html):

<li><a [routerLink]="route"><ng-content></ng-content></a></li>

所以基本上我只有这个:

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

@Component({
    moduleId: module.id,
    selector: 'nav-item',
    template: require('./nav-item.html'),
    directives: [ROUTER_DIRECTIVES]
})
export class NavItem {
    @Input() route = '/';


    constructor(){}
}

我得到的是

<ul>
    <nav-item _ngcontent-xng-6="" route="/aboutus" ng-reflect-route="/aboutus"><li><a ng-reflect-router-link="/aboutus" ng-reflect-href="/aboutus" href="/aboutus">About us</a></li></nav-item>
    <nav-item _ngcontent-xng-6="" route="/contactus" ng-reflect-route="/contactus"><li><a ng-reflect-router-link="/aboutus" ng-reflect-href="/contactus" href="/contactus">Contact us</a></li></nav-item>
</ul>

我当然不想要。

我想要的是将&lt;nav-item&gt; &lt;/nav-item&gt; 完全替换为&lt;li&gt;&lt;a&gt;&lt;/a&gt;&lt;/li&gt;

在 AngularJs 中这非常简单。

【问题讨论】:

  • './nav-item.html' 中有什么内容?

标签: javascript angular components


【解决方案1】:

这不受支持,我很确定将来不会。很长一段时间以来,replace: true 在 Angular1 中也被弃用了。

你可以做的是使用属性选择器,比如

@Component({
    moduleId: module.id,
    selector: '[nav-item]',
    template: require('./nav-item.html'),
    directives: [ROUTER_DIRECTIVES]
})
export class NavItem {
    @Input() route = '/';


    constructor(){}
}
<a [routerLink]="route"><ng-content></ng-content></a>

并像使用它

<ul>
    <li nav-item route="/aboutus">About us</li>
    <li nav-item route="/contactUs">Contact us</li>
</ul>

【讨论】:

  • 嗯,这对组件不太友好...在光学中具有全面的标记而不是 html,非描述性标记...所以 Tab1 Tab2 不再可能了,您需要执行
    • Tab1
    • Tab 2
    .... 不是真的很干净......到目前为止,A2 给我留下了非常非常深刻的印象,但这是一个很大的失望:'(
  • 替换元素会导致很多问题。我宁愿不首先使用&lt;ul&gt;,然后你可以有&lt;nav-item&gt; 孩子或任何你想要的。
  • 我愿意,但是引导程序的样式(仅)基于元素本身而不是类... afaik(至少在导航中定位 LI 时)
  • 那么问题是bootstrap对于Angular2不够灵活;-)
  • 您可以将@HostBinding('class.is-active') isActive:boolean = false; 添加到NavItem,当您设置this.isActive = true 时,is-active 类将添加到&lt;nav-item class="is-active"&gt;
【解决方案2】:

我认为你想要的是一个属性指令,而不是上面建议的组件。

【讨论】:

  • 您能否通过更多关于为什么的信息来改进您的答案?
猜你喜欢
  • 2016-06-14
  • 2019-12-28
  • 2014-12-09
  • 2017-04-28
  • 1970-01-01
  • 2020-12-28
  • 1970-01-01
  • 1970-01-01
  • 2018-07-16
相关资源
最近更新 更多