在我的ANGLE 6应用程序中,我希望在它之前过滤switchMap以获得内部可观察性,如下所示:

基本上,我想要做的是,如果store Select 器为我提供了给定字符串的相关数据,我将使用switchMap中的响应来激发内部可观察对象,并进行订阅.

这里的 idea 是,如果过滤成功,则使用switchMap查找过滤器响应的数据

 this._store.pipe(select(getDetails)).pipe(map((details: detail[]) => {
    return of(details.filter(({ tagName }) => tagName ===this.videoTagName))})
   switchMap((data:detail)=>this._store.pipe(select(getVideosByID(data.contentIds[0]))))).subscribe(data=>{
      console.log("Data",data)
   })

上面的代码给出了以下错误:

Type 'detail' is missing the following properties from type 'Observable<detail[]>': _isScalar, source, operator, lift, and 10 more.ts(2345)

combineLatest个人在这里能帮上忙吗?或者一些我只需要做switchMap的事..?

推荐答案

以下是几件事:

  1. 您可能应该以一种不与变量冲突的方式定义类型或类/接口.通常,人们会将类型大写,例如,你会有type Detail = ...,这样你就可以定义const detail: Detail = ....

  2. 假设细节不是可观测的,您不应该在RxJs的map的"project"参数中使用of.map的"project"参数是一个函数,它将一个可观测对象发出的值作为其参数,然后返回一个将改为发出的新值.在这里,如果您返回of,您的可观测对象将发出一个可观测对象(usually不是您想要的).这就是为什么你得到了你的错误:下面的switchMap期望被输送到一个emits detail的可观测对象,但结果它得到了Observable<detail[]>.如果你解决这个问题,你将排放details而不是detail,这还不是很完美,但我们正在接近.

  3. 如果要筛选唯一的详细信息(而不是详细信息列表),则应使用.find()而不是.filter().筛选返回与谓词匹配的所有元素的数组(可能只有1个元素的数组,但它仍然是数组).Find返回第一个匹配的元素.现在我们发出的是detail,所以在SwitchMap中输入就可以了,错误也就消失了.

  4. 您不需要链接.pipe()个调用,只需链接单个管道中的参数即可.这适用于前两个管道,但显然不适用于SwitchMap中的管道,因为如果将其移动到"主"管道中,detail将不再在作用域中.

完成所有这些操作后,您将获得以下代码,这些代码应该可以工作:

this._store.pipe(
  select(getDetails),
  map((details: Detail[]) => details.find(
    ({ tagName }) => tagName === this.videoTagName
  )),
  switchMap((detail: Detail) => this._store.pipe(
    select(getVideosByID(detail.contentIds[0])),
  )),
).subscribe(data => console.log("Data", data));

Angular相关问答推荐

Goto锚定在嵌套容器中,具有溢出自动

在Angular 17中加载页面时打开打印对话框

在不使用散列(#)路由的情况下刷新Angular 8的SPA时,删除404错误

是否可以将Angular 路由配置为在点击带有本地人力资源S的锚点时更新Angular 路由?

茉莉花-模板中调用了如何判断角管

无效的ICU消息.缺少';}';|Angular material 拖放(&A)

代码优化以删除Angular中的嵌套订阅

@ngrx/调度时未定义存储操作

当在server.ts文件中定义API路径时,Angular 17构建失败

Angular p-triStateCheckbox for each Select 更改不同的 colored颜色

NGX-Translate如何不得到404?

如何在 Angular 中创建通用的可重用组件

Renderer2.appendChild 没有按预期工作?

如何使用 Angular 12 material 验证密码和确认密码?

根据变量值更改按钮样式

将数组传递给 URLSearchParams,同时使用 http 调用获取请求

如何设置Angular 4背景图片?

找不到模块'@angular/compiler'

带有 Angular 的 Font Awesome 5

如何使用 Angular 6 工作的 ngModel 创建自定义输入组件?