问题标签 [behaviorsubject]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
68 浏览

android - (RxAndroid / RxJava)有什么方法可以检查来自 BehaviorSubject 的响应是否是缓存的?

我一直在与 BehaviorSubjects 合作,让演示者可以听取主题的响应,而无需自己进行查询。我一直被这类主题的美丽所吸引。

但是,缺点是...当演示者正在侦听新 API 调用的响应(例如,查询产品“A”的响应)并且 BehaviorSubject 自动将旧请求的缓存响应提供给它(例如,给演示者先前查询的产品“B”的响应)。

有什么方法可以检查来自 BehaviorSubject 的响应是否是缓存的(因此演示者可以在内部执行其必要功能之前使用此检查器)?

0 投票
2 回答
4965 浏览

angular - 如何使用 BehaviourSubject 获取所有项目和单个项目?

我在BehaviorSubject这里使用以下文章:

https://coryrylan.com/blog/angular-observable-data-services

在本文中,作者loadAll()用于加载所有项目和load()单个条目。load()然后将检索到的项目推dataStore送到然后被发送到next(...)函数中,以便所有订阅者得到通知。我不确定 100% 确定这是否是正确的方法。我不知道为什么,但对我来说这就是我们应该如何设计服务的方式似乎很奇怪。我可能是错的,因为我是新手BehaviorSubject。所以我的问题是,这是检索所有项目和单个项目的正确方法还是有更好的方法?

0 投票
2 回答
16990 浏览

angular - 如何测试 BehaviourSubject 下一个功能?

我正在尝试测试使用 a 的服务BehaviourSubject,但是我不确定如何。这是我的服务:

这是我的测试。我希望能够测试我的服务的过滤器逻辑。但是由于我在嘲笑数据,所以this.product$.getValue()将是空的并且过滤器将不会运行。

0 投票
1 回答
6984 浏览

angular - 如何向 BehaviorSubject 发出流已完成的信号

在 Angular 2 中,mySubject(见代码)编译了一个 complete() 函数,但在执行过程中出错,说没有这样的函数。我无法让 onComplete() 进行编译。

0 投票
1 回答
709 浏览

angular - 我想我错误地使用了 BehaviorSubject 订阅者,有人可以告诉我一个更好的方法来从我的 Angular2 中的 API 调用数据吗?

我在 Angular 应用程序中有几个导航按钮。我要做的是删除第一页上的“Prev”和最后一页上的“Next”。

我要做的就是设置两个布尔值,说明它是第一页还是最后一页。

麻烦的是我还没有设法理解这些subscribersbehaviours.

我可以创建一个计算最后一页的函数,totalItems所以itemsPerPage请不要担心,我只是不知道如何从这个订阅中调用一个函数。

如果有人可以请告诉我如何编写回调或其他任何需要这样做的东西,我将永远感激不尽。

组件.html:

组件.ts

更新 1

像这样的东西可以吗?

console.log(x);似乎给了我正确的数据,但现在我的(presenters$ | async)?.data东西都没有工作。

更新 2

上面的中断是因为this引用了函数调用(duh!),但是在尝试使用胖箭头时出现错误,有人知道我在这里做错了什么吗?

以上不会抛出错误,但仍然async无法正常工作。

下面抛出此错误:“错误:InvalidPipeArgument: '[object Object]' for pipe 'AsyncPipe'”

根据下面的链接,看起来我只需要删除异步管道,稍后再试一试。Angular 4:InvalidPipeArgument:管道“AsyncPipe”的“[object Object]”

更新 3

通过从模板中的数据调用中删除异步管道,(presenters$ | async)?.data"我克服了上次更新中的错误并设法获得了我在开发环境中工作后的功能。

现在的问题是它无法编译用于生产。当我尝试编译时,出现此错误:

ng:///var/www/html/io->radio/src/app/presenters/views/presenters.component.html (2,1) 中的错误:“行为主题”类型上不存在属性>“数据” { 数据:{ id:号码;>名称:字符串;详细信息:字符串;小拇指:字符串;radio_s ...'。

更新 4

我开始认为我在这里完全是个垃圾,这BehaviorSubject不是我应该使用的。我要做的就是从我的 API 调用数据并将其映射到一个对象,如果有人能告诉我我在这里做错了什么,那将是一个很大的帮助。

我认为我的问题是由于对 BehaviorSubject 的不当使用以及对异步管道缺乏了解造成的。

我的下一步是尝试来自@DeborrahK 的非常明智的建议,并创建一个用于检索数据的服务。

0 投票
0 回答
675 浏览

angular - Angular 2 双向绑定不适用于 JSON 对象

我正在尝试通过共享服务“Customer.service.ts”访问 json 数据。我能够得到所有结果,直到结束(从 CustomerComponent 到 CustomerComponentPopup)。但是,不知何故,两种方式绑定不起作用。以下是我的文件,我也发布了我的控制台输出

共享服务customers.service.ts

组件文件,showModal() 函数的 Onclick 我正在尝试打开引导模式弹出窗口。

组件文件 customer.component.ts //

Booststap Modal popup Component customersPersonalDetailComponentPopup

showChildModal 函数将打开模式弹出窗口。我在“this.selectedCustomer”中得到了我的愿望记录。

}

代码的输出console.log(this.selectedCustomer);

{id:13,姓名:“Bombasto”,地址:“Nice Address2”,电话号码:“111111”,资格:“edu3”} 地址:“Nice Address2”id:13 name:“Bombasto”电话号码:“111111”资格: "edu3" 原型:
构造函数:ƒ Object() hasOwnProperty:ƒ hasOwnProperty() isPrototypeOf:ƒ isPrototypeOf() propertyIsEnumerable:ƒ propertyIsEnumerable() toLocaleString:ƒ toLocaleString() toString:ƒ () valueOf:ƒ valueOf() defineGetter定义Getter () 定义Setter:ƒ defineSetter () lookupGetterlookupGetter() lookupSetterlookupSetter () 获取原型原型() 设置原型原型()

这是html文件代码popup.html

[(ngModel)]="selctedCustomer.name"没有显示任何内容,但它使用此表示法显示值{{selctedCustomer?.name}}

我不知道从 json 对象访问值我错在哪里

0 投票
2 回答
2201 浏览

angular - 构造函数中未定义的 BehaviorSubject

我对一些行为主题有疑问。

我有一项服务:

我在一个组件中使用它:

问题是当我在构造函数中记录可观察值的值时,第一个,boutonImprimerGrise 始终未定义,即使它在我的服务中设置为真,我不明白为什么,因为另一个是真的......

我记录了所有我能找到的东西,但一无所获,如果你有任何想法,欢迎你:)

谢谢

0 投票
1 回答
150 浏览

angular - Angular 2 在自定义 RadioButton 中使用 BehaviorSubject

我需要构建自定义 RadioButtons。当一个被选中时,它会调用一个服务,该服务会将其标识符发送给所有订阅的 RadioButtons,包括调用者。如果订阅者发现键(instance + id)与自己不同,它将取消选中自身,否则匹配的实例 + id(确实是调用者)将保持选中状态。服务:

组件的相关部分:

AfterViewInit() 初始化组件的主题(我认为)并且应该等待服务调用。当我单击一个单选按钮时,在组件中调用了 ClickEvent,我进入了服务中的 setRadioChecked 函数,next(key) 似乎正在执行,但它从未被组件的 AfterViewInit 订阅捕获。

我错过了什么?

谢谢您的帮助 :-)

0 投票
1 回答
1118 浏览

angular - Angular 2 BehaviorSubject 组件中的数据操作反映在服务中

这是我的数据服务:

这是使用 DataService 并格式化返回数据的组件:

}

的HTML

好的,事情是这样的,当网站加载时,数据被格式化并保存在 latestTests 变量中。当我在我的路线之间循环以便再次调用 ngInit 时,数据会再次格式化,我不明白。奇怪的是,当我 console.log(json); 在 DataService 中,它会注销格式化的数据,而不是原始数据……这怎么可能?!就好像 BehaviorSubject 的数据以某种方式发生了变化。我错过了什么?

如果我需要澄清,请帮助和评论。

0 投票
2 回答
995 浏览

javascript - 无论父母和孩子如何,在两个组件之间共享数据 - angular2

我一直在使用 BehaviorSubject 在组件之间共享数据。比如说,相对 url /article 属于 ArticleComponent。然后是 ArticlelistComponent 中的 /article/list,其中包含一个包含文章详细信息列表的表格。单击任何行时,我需要将该行详细信息传递给所有其他组件,这就是我的议程。我面临的问题是,ngOnInit 仅适用于页面重新加载。最初,只有默认 {} 反映在文章组件中,这不过是我为 BehaviorSubject 设置的默认结果。当我单击表中的一行时,该数据不会在 ngOnInit 中自动更新和订阅。旧值 {} 被保留在整个过程中。我不确定将其放置在何处以使更改立即反映出来。请帮忙解决。我的代码如下:

articlelist.component.ts

文章.service.ts

文章.component.ts

编辑:我在Angular2:RxJS 主题中扩展了我的观察,没有响应事件