首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将列表项分离为角中的组件

如何将列表项分离为角中的组件
EN

Stack Overflow用户
提问于 2018-12-02 23:33:39
回答 1查看 1.9K关注 0票数 3

假设我正在创建一个典型的待办事项列表,其结构如下:

代码语言:javascript
复制
<ul>
    <li>Item 1 - description for item 1</li>
    <li>Item 2 - description for item 2</li>
    <!-- ... -->
</ul>

我希望列表和项目尽可能可重用,这样我就可以将它们分成不同的组件:

Todo-list.Component*

代码语言:javascript
复制
@Component({
    selector: "todo-list",
    templateUrl: "todo-list.component.html"
})
export class TodoListComponent { /* ... */ }
代码语言:javascript
复制
<ul>
    <li todo-list-item *ngFor="let item of items" [item]="item"></li>
</ul>

todo-列表-项目。组件。*

代码语言:javascript
复制
@Component({
    selector: "li[todo-list-item]",
    templateUrl: "todo-list-item.component.html"
})
export class TodoListItemComponent { /* ... */ }
代码语言:javascript
复制
{{ item.title }} - {{ item.description }}

到目前为止,只要我坚持使用本地的HTML元素(如ulli ),一切都会正常工作。

然而,当我尝试使用角组件而不是本机元素(如mat-listmat-list-item )时,就会出现一个问题。

Todo-list.Component*

代码语言:javascript
复制
<mat-list>
    <mat-list-item todo-list-item *ngFor="let item of items" [item]="item"></mat-list-item>
</mat-list>

todo-列表-项目。组件。*

代码语言:javascript
复制
{{ item.title }} - {{ item.description }}

上面的代码片段无法运行mat-list-item不接受item,现在还有两个与mat-list-item[todo-list-item]匹配的组件定义。

我可以这样做:

Todo-list.Component*

代码语言:javascript
复制
<mat-list>
    <todo-list-item *ngFor="let item of items" [item]="item"></todo-list-item>
</mat-list>

todo-列表-项目。组件。*

代码语言:javascript
复制
<mat-list-item>
    {{ item.title }} - {{ item.description }}
</mat-list-item>

但是,现在结构不正确,不会产生正确的样式:

代码语言:javascript
复制
<mat-list>
    <todo-list-item>
        <mat-list-item>Item 1 - description for item 1</mat-list-item>
    </todo-list-item>
    <todo-list-item>
        <mat-list-item>Item 2 - description for item 2</mat-list-item>
    </todo-list-item>
</mat-list>

mat-list-item应该直接在mat-list下面

代码语言:javascript
复制
<mat-list>
    <mat-list-item>Item 1 - description for item 1</mat-list-item>
    <mat-list-item>Item 2 - description for item 2</mat-list-item>
</mat-list>

我知道我可以将这两个组件组合成一个单独的组件,但是每个列表项都可能相当复杂(带有按钮和附加逻辑),我希望它们位于单独的组件中。解决这个问题的通常方法是什么?我可以找到许多相关的问题(如thisthis),假设使用了本机元素,这里不是这样的。具体来说,如何使用我可以自己定义的两个组件创建以下结构?

代码语言:javascript
复制
<todo-list>
    <mat-list>
        <mat-list-item>Item 1 - description for item 1</mat-list-item>
        <mat-list-item>Item 2 - description for item 2</mat-list-item>
    </mat-list>
</todo-list>
EN

回答 1

Stack Overflow用户

发布于 2018-12-03 00:05:48

Todo-list.Component*

代码语言:javascript
复制
<mat-list>
    <todo-list-item *ngFor="let item of items" [item]="item"></todo-list-item>
</mat-list>

todo-列表-项目。组件。*

代码语言:javascript
复制
<mat-list-item>
    {{ item.title }} - {{ item.description }}
</mat-list-item>

你的例子看起来很有希望

但是你试过了吗

代码语言:javascript
复制
<mat-list>
   <mat-list-item *ngFor="let item of items" >
     <todo-list-item [item]></todo-list-item>
   </mat-list-item>
</mat-list>

todo-列表-项目。组件。*

代码语言:javascript
复制
    <p>{{ item.title }} - {{ item.description }}</p>

那样的话,就应该把垫子清单上的物品隔离在垫子清单上。

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

https://stackoverflow.com/questions/53585665

复制
相关文章

相似问题

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