阅读 QueryList,我可以看到它是一个不可修改的列表,但它包含一个名为更改的可观察对象,我可以订阅并访问它收到的任何更改。它还有一个 reset() 函数,可以“更新查询列表的存储值”。
在我的例子中,QueryList 是 @ViewChildren 指令的结果,该指令查询页面上的一组视图。我对其工作原理的猜测是,当 Angular 将所有内容绘制到屏幕上时,QueryList 会触发,并且我们会得到一些相关视图的列表。如果我然后运行:
myQueryList.toArray();
然后我可以访问这些视图。但是现在让我们考虑一个新视图(我们称之为 newView)被添加到屏幕上。如果我此时访问 queryList,它不应该改变。但是如果我订阅了 queryList.changes,那么我会收到一个包含所有旧视图和新视图的新视图列表。
如果我想让 myQueryList.toArray() 反映这些更改,我必须执行以下操作:
myQueryList.changes.subscribe((changes) => {
//"changes" should be a list/array of all the old views plus newView
myQueryList.reset(changes)
//The result of this call will contain all of old views, and newView
myQueryList.toArray();
});
- myQueryList.changes 的结果是否包含屏幕上与 ViewChildren 查询相关的所有视图,还是仅包含最初不存在的新视图?
- 在上述庄园中使用重置是更新 myQueryList 内容的正确方法吗?