Dart 使用<;内容>;

Dart 使用<;内容>;,dart,angular-dart,Dart,Angular Dart,我试图制作一个简单的组件,在数据到达之前显示加载屏幕,并提供简单的错误处理: 的模板如下所示: 正在加载,请稍候。。。 发生错误:{cmp.Error} 但是,被转移的组件只在其属性上看到null,而不是来自控制器的预期数据,因此无法呈现 我假设这是因为它是在的范围内呈现的,而原始的ctrl绑定不再可用?有没有办法解决这个问题,保留原始的属性绑定 编辑:正如下面的评论中提到的,问题似乎来自转换与的结合,以及组件通过其属性接收数据。只需转换简单的值,如{{ctrl.graphWidth}就

我试图制作一个简单的组件,在数据到达之前显示加载屏幕,并提供简单的错误处理:


的模板如下所示:


正在加载,请稍候。。。
发生错误:{cmp.Error}
但是,被转移的
组件只在其属性上看到null,而不是来自控制器的预期数据,因此无法呈现

我假设这是因为它是在
的范围内呈现的,而原始的
ctrl
绑定不再可用?有没有办法解决这个问题,保留原始的属性绑定

编辑:正如下面的评论中提到的,问题似乎来自转换与
的结合,以及组件通过其属性接收数据。只需转换简单的值,如
{{ctrl.graphWidth}
就可以了

edit2:根据要求,控制器

@NgController(
选择器:“[某些图形]”,
publishAs:'ctrl')
类SomeGraphController实现Ngatachaware{
bool dataLoaded=false;
字符串dataError=null;
int graphWidth=-1;
列出数据;
无效附加(){
requestData()。然后((d){
数据=d;
dataLoaded=true;
}).catchError((e)=>dataError=e.toString());
}
}
和图表组件

@NgComponent(
选择器:'图形',
模板:“”,
cssUrl:“/graph.css”,
出版物:“cmp”)
类GraphComponent实现了NgShadowRootAware{
@NgOneWay('宽度')
整数宽度;
@NgOneWay(“数据”)
列出数据;
void onShadowRoot(ShadowRoot ShadowRoot){
打印(“显示$data”);
绘图(shadowRoot.querySelector(“图表”);
}
}

当图形组件在加载组件内使用时,print语句打印“displaying null”,但在外部使用时,正确打印从控制器分配的数据。

我认为这不是范围问题。

我尝试在没有所有ng开关标记的情况下进行复制,graph从应用于

的祖先的控制器获得了值,问题是

<loading done="ctrl.dataLoaded" error="ctrl.dataError">
  <graph
      width="ctrl.graphWidth"
      data="ctrl.data">
  </graph>
</loading>

在被传递到
之前立即呈现。此时,数据还不存在(这就是加载元素的意义所在),所以graph的属性为null,无法呈现。稍后,当数据加载完毕且
组件更改其显示内容后,将显示第一次渲染失败的结果

可能的解决办法

  • 每当所有必需属性设置为非空值时进行渲染
  • 具有一个特殊的
    数据显示属性
    ,并且仅在该属性设置为true时渲染

这两种方法都无法达到使用
标记的目的,但我还不确定该怎么做。完美的解决方案是延迟求值,不确定AngularDart是否能做到这一点?

Hm,当我用eg{{ctrl.graphWidth}替换时,值确实正确显示。然而,当我在加载组件之外使用时,它工作正常,因此问题似乎来自于两者的结合。这就是为什么它让我想到范围界定。(我假设{ctrl.graphWidth}}立即得到求值,而只有在被插入后才得到求值)能否添加控制器和图形组件的代码?能否将
width
data
更改为GraphComponent中的getter/setter,并在调用setter时打印值?这可能是一个时间问题。最近几周有几份报告显示,在调用
onShadowRoot
时,尚未设置属性值。一种解决方法是在新的
未来((){print('…})中将代码包装在
onShadowRoot
中根据我添加的打印,setter是用“null”调用的。在Future中包装所有内容都没有帮助,即使在Future被执行时,属性中的值仍然是null。好的,如果setter只是用null调用的,Future也帮不上忙。你有没有尝试过不使用switch指令。也许它们会以某种方式干扰?