Dart 角省道组件不总是显示在web应用程序中

Dart 角省道组件不总是显示在web应用程序中,dart,angular-dart,Dart,Angular Dart,在我们的角镖应用程序中,定义了一些组件(@NgComponent)。第一次显示此类组件时,它会正确显示。从第二次开始,该组件有时显示在web应用程序中,有时不显示。调试表明,即使未显示,也会执行组件的代码。似乎没有出现异常/堆栈跟踪。 在试图追踪问题时,我们让组件实现NgShadowRootAware,并添加了void onShadowRoot(ShadowRoot ShadowRoot){}方法。每次在onShadowRoot方法中放置断点时,组件都会正确显示。删除断点后,大多数情况下,组件h

在我们的角镖应用程序中,定义了一些组件(@NgComponent)。第一次显示此类组件时,它会正确显示。从第二次开始,该组件有时显示在web应用程序中,有时不显示。调试表明,即使未显示,也会执行组件的代码。似乎没有出现异常/堆栈跟踪。 在试图追踪问题时,我们让组件实现NgShadowRootAware,并添加了void onShadowRoot(ShadowRoot ShadowRoot){}方法。每次在onShadowRoot方法中放置断点时,组件都会正确显示。删除断点后,大多数情况下,组件html不会显示在web应用程序中

显然,调整浏览器窗口的大小(多次)似乎会使组件显示出来

查看\u objectdata\u component.dart

库视图\u对象数据\u组件;
导入“包:角度/角度.dart”;
导入“dart:html”;
导入“../model/model.dart”;
@NGO组分(
选择器:“查看objectdata”,
cssUrl:“../lib/component/view_objectdata_component.css”,
templateUrl:“../lib/component/view_objectdata_component.html”,
出版物:“cmp”
)
类ViewObjectDataComponent实现NgShadowRootAware{
@NgTwoWay('objectdata-map')
地图数据地图;
@NgTwoWay('readonly')
bool readonly=true;
@NgTwoWay('editLink')
字符串编辑链接;
字符串_id;
ViewObjectDataComponent(RouteProvider RouteProvider){
_id=routeProvider.parameters['id'];
}
bool get hasEditLink=>theEditLink!=null;
字符串get editLink=>theEditLink.replaceAll(“”,\u id);
ObjectData获取数据{
ObjectData val=dataMap[_id];
返回val;
}
列出获取属性{
列表=[];
for(data.attributes.values中的ObjectAttribute simAtt){
添加列表(simAtt);
}
退货清单;
}
void onShadowRoot(ShadowRoot ShadowRoot){
shadowRoot.querySelector('#myDiv').children.add(
新span元素()…文本=“”
);
}
}
查看\u objectdata\u component.html


{{cmp.data.getAttVal('Name')}
ID:{{cmp.data.ID}
由以下人员调用:

{{ctrl.changeMainSection('applications')}

我认为,当数据(应用程序)从queryService异步加载时,此更新不会触发整个依赖链。当您有一个断点时,加载数据将同时完成,然后显示全部。如果没有断点,则渲染完成,并且无法识别数据更改

代码中存在一些Angular不喜欢的模式,这可能会导致这种行为。 (如果升级到Angular 0.9.9,将出现一些例外情况)

有几种方法可以让你做类似的事情

列表)。
Map asDataMap(List List){
每次调用时都返回一个新集合

也许你应该考虑一个不同的策略来加载数据。 您可以将QueryService注入组件,并创建一个从组件调用的异步
getApplications
方法,如
QueryService.getApplications()。然后((数据)=>updateApplications(数据));

当您查看我在这里发布的调试输出时,您会看到Angular调用方法检查数据更新的频率。如果每次创建一个新集合,这是非常低效的。这就是为什么0.9.9不再支持它的原因


我希望这能有所帮助。

很可能是时间问题。你能发布一些代码吗?我在文章中添加了一些代码。如果需要,我可以提供一个包含项目代码的zip文件,该项目代码可以与一些本地演示数据一起运行。版本:Dart Editor版本1.2.0.release(稳定版)/angular 0.9.8能否使用源代码创建GitHub repo。我还不明白的是如何“第二次”显示组件。代码应位于:。=>单击应用程序以显示特定细节(=由组件实现)。顺便说一句:显然,正在调整大小(多次)浏览器窗口可能会显示组件。我可以重现该问题。我还没有找到原因。非常感谢您的调查和良好的反馈。我将根据您的评论调整代码。顺便说一句:通常情况下,在重新调整浏览器窗口大小时(但不是所有时候)会显示组件,因此我不确定问题是否完全是由数据加载方式引起的。通常,当浏览器窗口变小并放大时,组件内容会显示出来。谢谢&我将(通过此线程)让您不断更新我认为Angular会重新评估某些操作的数据,然后当它看到数据已更改时,会更新视图。但这并不是在应用程序所需的所有情况下都会完成,因此有时不会显示任何内容。您可以查看和。Angular似乎需要纯函数(对于相同的参数,始终返回相同的值)代码已根据备注进行了修改,并使其在angular dart 0.9.9中运行良好。不过,同样的问题仍然存在:即使chrome shadow dom viewer指示组件的html代码已正确生成,组件html视图也不会始终显示。在这种情况下,请调整浏览器窗口的大小(通常更改宽度以使其更窄)使组件内容显示。上载代码(v00.02)角度省道0.9.9-Dartium版本33.0.1750.48(251129)-省道编辑器版本1.2.0.release(稳定)你试过构建JS并检查它是否在那里工作吗?我怀疑这是Dartium的问题。我已经在Dartium中使用了类似的聚合物元素。该应用程序似乎工作正常。所有内容都可以在开发工具中看到。我看到一些