为了账号安全,请及时绑定邮箱和手机立即绑定

@deprecated 的 combineLatest 重构——不再支持 resultSele

@deprecated 的 combineLatest 重构——不再支持 resultSele

千巷猫影 2023-04-20 16:54:44
角度材料文档应用程序中包含以下代码片段:    // Combine params from all of the path into a single object.    this.params = combineLatest(      this._route.pathFromRoot.map(route => route.params),      Object.assign);TSLint 删除了combineLatest这条消息:@deprecated — 不再支持 resultSelector,而是通过管道映射应该如何解决?此外,如果您了解所使用的技术,那么一个简单的详细示例会很棒。这是一个代码链接:https://github.com/angular/material.angular.io/blob/master/src/app/pages/component-category-list/component-category-list.ts
查看完整描述

3 回答

?
qq_笑_17

TA贡献1818条经验 获得超7个赞

combineLatest(observables, resultSelector)

通常可以替换为


combineLatest(observables).pipe(

  map(resultSelector)

)

但这是否以相同的方式工作取决于您resultSelector接受的参数。combineLatest(observables)发出一个数组,当你使用已弃用的 resultSelector 时,RxJs 会自动传播这个数组。


return isArray(args) ? fn(...args) : fn(args); // fn is your resultSelector

AsObject.assign根据您提供的是数组还是多个值返回不同的值,您必须手动展开数组。


combineLatest(observables).pipe(

  map(items => Object.assign({}, ...items))

)


查看完整回答
反对 回复 2023-04-20
?
千万里不及你

TA贡献1784条经验 获得超9个赞

结果选择器只是一个可用于更改输出形状的函数。


因此,您可以简单地省略结果选择器参数并使用地图来转换形状:


    this.params = combineLatest(

      this._route.pathFromRoot.map(route => route.params)

    ).pipe(

        map(Object.assign)

    );

结果选择器的一个常见用途(对我来说)是将数组作为具有命名属性的对象返回,所以像这样:


// 旧方法


myObs$ = combineLatest(

   [src1$, src2$, src3$], 

   ([src1, src2, src3]) => ({src1, src2, src3})

);

// 新方法


myObs$ = combineLatest(src1$, src2$, src3$)

    .pipe(

       map(([src1, src2, src3]) => ({src1, src2, src3}))

    );


查看完整回答
反对 回复 2023-04-20
?
慕少森

TA贡献2019条经验 获得超9个赞

pipe结果并改用map运算符,例如:

combineLatest(this._route.pathFromRoot.map(route => route.params)).pipe( 
 map(Object.assign)
);

此外,不确定代码的意图,因为它似乎正在调用Object.assign一个新的数组引用,不确定为什么这是必要的,但这并不完全相关。


查看完整回答
反对 回复 2023-04-20
  • 3 回答
  • 0 关注
  • 92 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信