Javascript 如何从角度服务中的行为主体中提取数据?

Javascript 如何从角度服务中的行为主体中提取数据?,javascript,angular,typescript,rxjs,Javascript,Angular,Typescript,Rxjs,使用BehaviousSubject的目的是使用单个API调用,并将相同的数据以相同的路由传递给多个组件。 我能做到。我无法过滤接收到的数据 这是我制作的stackblitz小提琴 在一个组件中,我显示表,在另一个组件中,我需要根据单个对象键值从表中提取一些信息。比如有多少待办事项是完整的/不完整的。 因为我需要在模板中的任何地方使用异步管道,所以不可能执行筛选器之类的操作。 有没有更好的方法来实现这一点 我需要将提取的数据保持为可重用的您当前使用的是异步管道。要获得所需的结果,可以使用另一个自

使用BehaviousSubject的目的是使用单个API调用,并将相同的数据以相同的路由传递给多个组件。 我能做到。我无法过滤接收到的数据

这是我制作的stackblitz小提琴

在一个组件中,我显示表,在另一个组件中,我需要根据单个对象键值从表中提取一些信息。比如有多少待办事项是完整的/不完整的。 因为我需要在模板中的任何地方使用异步管道,所以不可能执行筛选器之类的操作。 有没有更好的方法来实现这一点


我需要将提取的数据保持为可重用的

您当前使用的是异步管道。要获得所需的结果,可以使用另一个自定义管道或将其与数据链接,以获取特定的属性

我已经介绍了stackblitz示例,并用解决方案修改了代码。

基本上,您所需要做的就是使用自定义管道

{{ todos$ | async | myCustomFilter }}
在我的示例stackblitz中,我正在做:

    <p>
      No. of Completed Todos: {{ (todos$ | async | filterByCondition: {property: 'completed', value: true}).length }}
    </p>

    <p>
      No. of Incomplete Todos: {{ (todos$ | async | filterByCondition: {property: 'completed', value: false}).length }}
    </p>
现在,您可以将处理程序放入管道过滤器todo中,以获取此byDate值

2对不同的数据使用不同的观察值

类MyComponent{ todos$; 完成托多美元; 建造师{ this.todos$=this.someService.gettoos;//来自行为主体 this.completedTodos$=this.todos$.pipe filteritem=>{ //你的过滤代码在这里 } } }
因此,我曾参与过一些项目,在创建TODO部分时,我的方法是订阅URL以获取数据,创建Redux存储 这里有一个[链接],它有一个像

接口ProductTodos{ 产品:{title:string,iscompleted:boolean,id:string/number}, 待办事项?:任何[]
}有没有不使用异步管道获取数据的方法?并在服务本身中过滤该结果,以便过滤后的输出可以重用。实际上,我不会称之为过滤,因为这只是从响应中提取一些数据。在角度世界中,从观察对象/行为主体获取数据时,使用异步是首选。您不喜欢链接管道以获得所需结果的原因是什么?我相信这是最好的可重复使用的解决方案,在你的应用程序中包含最少的重复代码。如果我在模板中使用自定义管道,我将不得不创建大量管道,因为有许多条件需要评估和获取值。在angular 1.x中,我曾经在控制器文件中使用$filter并重用它。你有什么建议?使用管道是最好的方法吗?此外,更大的目标是最小化模板中的计算和操作,并在typescript文件服务/组件中执行它们ts@prawwe316你完全正确。您可以在您的服务中创建这样的可观察对象/主题,只需将它们导入到组件中即可重用。一个秘密:NgRx的状态选择器也有类似的功能;