【问题标题】:Angular 2 - ngfor without wrapping in a containerAngular 2 - ngfor 没有包装在容器中
【发布时间】:2016-08-28 13:12:24
【问题描述】:

我希望有一个 ul 元素,然后在我的 json 中,我有 html,其中包含来自各种社交媒体网站的列表 (li) 元素。当我将 ngfor 放在列表项上时,会为每个输出的 json 记录创建多个 ul .. 是否可以将每个 li 输出为纯 html 而不是将它们包装在一个元素中

我的 json 的小样本

{
    "courses": [{
        "tile_id": 0,
        "tile_content": "<li class=\"grid-item horiz-double blog-tile\" data-item-id=\"0\">yrdy<\/li>"
    }],
}

我的 Angular 服务的小样本 - 这可以完美运行并输出 json,但我可能缺少某种格式设置

public getCourses() {

    this._http.get(this.apiUrl).map(response => response.json()).subscribe(data => {
        // console.log( data.courses );
        this._dataStore.courses = data.courses;

        // console.log(this._coursesObserverXX);

        this._coursesObserverXX.next(this._dataStore.courses);

    }, error => console.log('Could not load courses.'));

}

和我的 html

<ul class="list-group" *ngFor="#course of courses | async">
      {{ course.tile_content }}
</ul>

目标是不让 ngfor 输出包装器,并且将输出显示为纯 html 而不是纯文本,因为它似乎出来了

【问题讨论】:

    标签: angular


    【解决方案1】:

    在某些情况下,&lt;ng-container&gt; 可能有用。喜欢(不适用于这个特定问题):

    <ng-container *ngFor="let item of items; let i = index">
      ...
    </ng-container>
    

    在 DOM 中,它的内容照常呈现,但 the tag itself is rendered as an HTML comment

    来自the documentation

    &lt;ng-container&gt; 对兄弟元素进行分组

    [...]

    &lt;ng-container&gt; 救援

    Angular &lt;ng-container&gt; 是一个不会干扰样式或布局的分组元素,因为 Angular 不会将它放入 DOM。

    【讨论】:

    • 天哪,我为什么没有想到这一点。已经绞尽脑汁好几个小时试图弄清楚一些事情。将我的 div 更改为 ng-container,现在我可以使用简单的 css 来实现我想要做的事情
    • 对于那些来自 react 的人,将ng-container 视为与 React 中的 React.Fragment 等效的角度
    【解决方案2】:

    你可以使用outerHTML

    <ul class="list-group" >
      <li *ngFor="let course of courses | async" [outerHtml]="course.tile_content"></li>
    </ul>
    

    Plunker example

    【讨论】:

    • 不完全是我所追求的......你看到 li 标签将由 json 结果提供 - 我基本上需要将 ul 标签之间的 json 转储为原始 html
    • 抱歉,忘记将 *ngFor 移动到 &lt;li&gt; 元素。现在它生成了预期的 HTML。
    • 你检查过 Plunker 吗?它现在正在生成未用 &lt;ul&gt; 包裹的 &lt;li&gt;
    • 干杯,我最终将其用作基点并放弃了创建新指令的想法。
    • 当我发布答案时,Plunker 示例在当时有效。
    【解决方案3】:

    不确定你想要/尝试做什么,但你可以这样做:

    <ul class="list-group">
      <li *ngFor="#course of courses | async">
        {{ course.tile_content }}
      </li>
    </ul>
    

    请注意,也可以使用扩展语法:

    <template ngFor [ngForOf]="courses | async" #course>
      {{ course.tile_content }}
    </template>
    

    (模板标签不会添加到 HTML 中)

    编辑

    这行得通:

    <ul *ngFor="#elt of elements | async" [innerHTML]="elt.title">
    </ul>
    

    看到这个 plunkr:https://plnkr.co/edit/VJWV9Kfh15O4KO8NLNP3?p=preview

    【讨论】:

    • 第二个选项可能是我正在寻找的更多...我希望只是将 json 转储在 ul 标签之间。会这样做输出原始 html,我是否使用第二种方法通过制定指令......对不起,角度很新,所以我可能使用了错误的术语
    • 不用担心。在 ngFor 级别使用 innerHTML 属性是可能的;-) 我更新了我的答案...
    • 我添加了一个 plunkr 来证明这一点
    • 谢谢老兄,所以我制定了一个新指令,这对我有用 @Component({ selector: 'social-wall', template: &lt;template ngFor [ngForOf]="socialwall | async" #social &gt; {{ social.tile_content }} &lt;/template&gt;, }) 但它不是普通的 html 任何想法我如何在这个级别上工作
    • 我认为innerHTML 属性是你应该使用的。它将允许您呈现 HTML...
    猜你喜欢
    • 1970-01-01
    • 2017-04-04
    • 2017-09-20
    • 1970-01-01
    • 2017-04-13
    • 2018-05-02
    • 2018-06-11
    • 2016-06-22
    • 1970-01-01
    相关资源
    最近更新 更多