我真的用这个把我的头撞到墙上了…:-\
我有一个哑组件,它具有接收数组的@Input()
:
export class ChildComponent implements OnChanges {
@Input() items: Item[];
ngOnChanges(changes: SimpleChanges) {
console.log('ngOnChanges fired:', changes['items'].currentValue.length)
}
}
父组件通过模板绑定和async
管道将数组传递给子组件:
<h1>Parent Component</h1>
<child [items]="items$ | async"></child>
这样做正确吗?
但是,items$
发出新值时,子组件中不会激发ngOnChanges
。
我有一个数据存储
类来维护这个可观察的项目数组。获取新项目时,它会生成一个新数组(不可变),并将其推送到items$
observable。但是,在子组件中未检测到更改。如果我在页面周围单击一点,最终将启动更改检测,它将更新。
关键是:我在StackBlitz上创建了一个问题示例,结果发现它在那里工作得很好!!!!
因此,我知道我的真实代码与简化的示例有所不同,但我一直无法找到它。
因此,我的问题是:
如何调试RxJS/Angular?
>
我想也许项目$
可观察引用被重新分配到某个地方,让模板订阅一个实际上没有得到新排放的可观察引用,所以我让@Input()
成为一个每次都可以监控的getter/setter它被设定了,而且只发生一次。
我尝试将子组件更改为使用OnPush
更改检测策略,但没有效果。
我被难倒了...
关于如何追踪我的问题有什么建议吗?
谢谢!:-)
通过将{{items$|async | json}}
放在父组件中靠近子组件的某个位置,确保可观察对象正在发射。您可能会发现items$没有发出值,如果是,则子项将得到更新。
您是否正在修改当前阵列并重新提交同一实例?修改数组时,请确保使用spread操作符、map或filer构建新数组,而不是推送和弹出值,然后让observable使用修改后的数据发射相同的数组实例。确保您发出一个新的数组实例,不要对旧的进行变异。
与您的问题无关,但我倾向于在OnChanges上使用setter属性
export class ChildComponent {
items: Item[];
@Input('items')
set itemsSet(items: Item[]) {
this.items = items;
console.log('items set:', items.length);
}
}
tl;dr:ngOnChanges显示在输入属性上检测到更改,但视图未更新 我正在开发一个Angular(2+)应用程序,试图为一个异步任务创建一个进度条,该任务由一个服务使用可观察的。Observable将数字作为数据推送,以指示任务已完成的百分比。涉及三个部分:服务、ResultsComponent和ProgressBarComponent(ResultsComponent的子级)。基本数据流
我有一个项目,使用角的$超文本传输协议服务从远程位置加载数据。我想使用rxjs的可观察性,所以我的服务中的调用看起来像这样: 这是我的控制器订阅的,如下所示: 问题是,尽管名称、电子邮件和个人资料图片正在更新,但这些更改不可见。一旦其他任何东西触发角$应用,更改就会出现,但由于可观察到,控制器中的这些更改发生在由$超文本传输协议调用触发的角摘要循环之后。如果我的服务只是向控制器返回一个promis
问题内容: 我目前正在使用基于Web的Twitter客户端,因此我使用了angular.js,node.js和socket.io。我通过socket.io将新的推文推到我的客户端,服务在其中等待新的推文。当一条新的推文到来时,该服务通过$ broadcast发送事件。 在我的控制器中是一个事件侦听器,其中传入的tweet在单独的函数中进行处理。此功能只是将新的推文推入我的推文范围。 现在,我的问题
有人能告诉我如何在计划的时间段内更新视图吗。例如,每秒钟。 我遇到的问题是,当我使用计时器时,它在不同的线程上运行,它不允许我更新视图并给出以下错误。 04-08 01:19:35.910:带dalvikvm(11040):线程ID=13:线程退出,但出现未捕获的异常(组=0x40a3e1f8)04-08 01:19:35.910:E/AndroidRuntime(11040):致命异常:线程13
问题内容: 我正在AngularJS中构建仪表板系统,但遇到通过设置URL的问题 在我们的仪表板中,我们有一堆小部件。单击它们时,每个视图都会显示一个更大的最大化视图。我们正在尝试设置深层链接,以允许用户使用最大化的小部件链接到仪表板。 目前,我们有2条路线看起来像和 当用户最大化窗口小部件时,我们使用来更新url ,但这会导致视图重新呈现。由于我们拥有所有数据,因此我们不想重新加载整个视图,我们
问题内容: 我有一个Angular SPA,它根据一些餐厅数据的不同部分提供了各种推荐列表和位置的Google Map(请参阅m.amsterdamfoodie.nl)。我希望每个列表都有自己的URL。为了让Google抓取不同的列表,我将标签用于offcanvas导航。 目前,标签会导致视图刷新,这在地图上非常明显。 我可以防止使用和(请参见下面的代码段),但是随后我需要实现一种更新浏览器URL