【问题标题】:Angular: *ngFor in parent or child component?Angular:*ngFor 在父组件或子组件中?
【发布时间】:2020-03-10 05:47:01
【问题描述】:

请看下面我的应用墙模板。我想知道我是否应该选择<app-brick *ngFor="..."></app-brick>,或者<app-bricks>,在它自己的模板中使用*ngFor。在这方面是否有最佳实践,还是完全取决于具体情况?

@Component({
  selector: 'app-wall',
  template: `
      <app-brick *ngFor="let brick of bricks"></app-brick>

      or

      <app-bricks></app-bricks>
  `
})
@Component({
  selector: 'app-brick',
  template: '<div> I'm a brick! </div>'
})
@Component({
  selector: 'app-bricks',
  template: '<div *ngFor="let brick of bricks"> I'm a brick! </div>'
})

【问题讨论】:

    标签: angular typescript design-patterns parent-child angular-components


    【解决方案1】:

    两者都是正确的,根据我将bricks 数组传递给子组件并像'&lt;div *ngFor="let brick of bricks"&gt; I'm a brick! &lt;/div&gt;' 一样显示它更好,因为子组件只会呈现一次。

    父.ts

    <app-bricks [bricks]="bricks"></app-bricks>
    

    child.ts

    @Input() bricks : any[]
    
    @Component({
      selector: 'app-bricks',
      template: '<div *ngFor="let brick of bricks"> I'm a brick! </div>'
    })
    

    【讨论】:

    • 如果要对组件的某些实例进行一些更改怎么办?那么保留组件的不同实例而不是简单地依赖子组件内的多个 *ngIf 和 *ngFor 指令将是有意义的。如果我错了,请纠正我。
    • @adibro500 我根据问题中给出的场景将我的观点放在这里,其他情况,当然两种方式都有利弊:)
    • @adibro500 如果您需要更改特定的brick,那么您的组件将根据brick 属性处理逻辑。这就是组件存在的原因。
    • @Florian 但组件的每个实例也可以携带自己的状态,对吗?我使用了组件数组实例,它们实际上可以保持其独特的状态。例如,全局变量可以像从一个组件实例封装到另一个组件实例一样。在这种情况下,使用子组件数组是有意义的。
    • @adibro500 这一切都取决于用例。例如,您可以拥有一个处理一般逻辑的主要组件bricks,并且您的bricks 模板 将显示brick 类似&lt;app-brick *ngFor="let brick of bricks"&gt;&lt;/app-brick&gt; 的组件。并且您处理砖组件内部砖的特定逻辑。你应该使用适合要求的东西
    猜你喜欢
    • 2019-08-24
    • 2018-07-06
    • 1970-01-01
    • 2016-09-26
    • 2018-06-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-15
    相关资源
    最近更新 更多