角@Input类型为Observable

时间:2018-07-20 10:09:22

标签: angular typescript observable

将组件的@Input传递给可观察对象是一种不好的做法吗?

例如: 父级模板将具有

<profile-edit [items$]="profileFacade.items$">

和ProfileEditComponent将具有这样的变量:

@Input items$: Observable<ProfileItem[]>

并使用|异步管道来解散模板中可观察值 ProfileEditComponent的

2 个答案:

答案 0 :(得分:2)

对于rolli <- function(ix) { data.frame(coef = rollapplyr(ix, width = 12, function(ix) { coef(lm(y ~ x, data = dat, subset = ix))[2] }, by = 1), Date = dt$Date[ix][1], Stkcd = dt$Stkcd[ix][1]) } do.call("rbind", by(1:nrow(dt), dat[c("Date", "Stkcd")], rolli) 管道来说,这是一个很好的解决方案,但是请注意更改检测机制。因为从角度async的有界属性不会改变,所以如果将更改检测策略设置为[items],则可能不会相应刷新视图。然后,您将需要手动订阅此可观察的输入,并在每次更改触发时自行检测更改。

答案 1 :(得分:2)

我认为这不是好习惯。 Angular为您提供了async管道,这正是您想要的。

使用async管道时:

    不需要生成
  • 更少的代码,因为您不需要先订阅可观察的内容。

  • 该组件不需要了解Observable类,并且像这样更愚蠢

所以我认为:

<profile-edit [items]="profileFacade.items$ | async">


@Input items: ProfileItem[]

比这更干净,更好:

<profile-edit [items]="profileFacade.items$">`


@Input items: Observable<ProfileItem[]>`

仅凭我的猜测,我不是专家。