【问题标题】:Angular component that encapsulates <li> tag封装 <li> 标签的 Angular 组件
【发布时间】:2016-02-26 19:16:04
【问题描述】:

假设我有一些样式列表:

<ul>
  <li>...</li>
  <li>...</li>
  ...
</ul>

现在我想将每个 &lt;li&gt; 项目封装到单独的组件中。这样做,我们会在生成的 DOM 中得到类似的东西:

<ul>
  <my-item><li>...</li></my-item>
  <my-item><li>...</li></my-item>
  ...
</ul>

问题是,它破坏了样式。我们会在项目之间得到错误的边距、错误的边框等。如果我们使用外部 CSS,问题就会变得很糟糕。

那么,有没有办法将&lt;li&gt; 样式直接应用到&lt;my-item&gt; 而无需编辑外部CSS 文件?在 AngularJS 中有一个用于指令的 replace 选项,但在 Angular 中它不存在 afaik。

【问题讨论】:

  • 你用的是什么库?,通常你在一个类中有相同的元素选择器。
  • 为什么需要 来包装
  • ?您不能简单地使用指令 (
  • 或只是 ) 吗?甚至更简单,ngRepeat?
  • enguerranws,Angular 2 中的指令不应该有模板。如果我需要在里面显示一些数据怎么办?当然,它可以通过额外的 DOM 操作来实现,但我认为这不是一个好主意。另一方面,组件总是将其内容包装到外部标签中。
  • @troorl 你在使用哪个库?同样,它应该具有与css类匹配的样式,而不仅仅是html元素。
  • @troorl “在 Angular2 中的指令不应该有模板”是什么意思。如果要添加内容,请使用组件而不是指令。组件有一个模板。
  • 标签: css angular


    【解决方案1】:

    Angular2 答案

    正如@enguerranws 提到的,为您的组件使用属性选择器而不是标签选择器

    @Component(selector: '[myLi]', ...
    //@Component(selector: '[my-li]', ...
    

    并像使用它

    <li myLi>...
    <!-- <li my-li>... -->
    

    Angular2 没有 replace 选项,并且它在 Angular 1.x 中也被弃用了一段时间。

    要允许&lt;my-li&gt; 的用户传递自定义内容,请在模板中添加&lt;ng-content&gt;&lt;/ng-content&gt; 标记(您可以在每个&lt;my-li&gt; 元素应显示的&lt;ng-content&gt; 标记之前和之后添加自定义内容。

    @Component(
      selector: '[myLi]', // '[my-li]', 
      template: '<ng-content></ng-content>'
      ...)
    

    【讨论】:

    • 这个方案的问题是不能在组件内部的li标签上添加属性,例如ng-class。或者有可能吗?
    • 当然。您可以添加@HostBinding('attr.someattr') isSomeAttr:boolean = false;。如果你设置this.isSomeAttr = true;,那么属性someattr会像&lt;li my-li someattr&gt;一样添加
    • 糟糕,我正在尝试使用 Angular 1.5 组件执行此操作,我认为这个问题与他们有关。
    • 那是因为从问题中不清楚:-/我在答案中使其更加突出。
    • 你能修正你的语法吗?它应该是选择器:'[custom-attribute-name]',而不是包含字符串的数组。
    【解决方案2】:

    有点晚了,但是使用以下解决方案怎么样

    <ul>
      <my-item class='myLi'>...</my-item> <!-- or -->
      <my-item [ngClass.myLi]='isList'>...</my-item> 
      ...
    </ul>
    

    在你的 CSS 上:

    .myLi {
        display: list-item;
        // and everything else you've styled your li
    }
    

    【讨论】:

      猜你喜欢
      相关资源
      最近更新 更多
      热门标签