在AngularDart中包含mustache指令时,NgAttr值最初为空

Pat*_*lin 5 attributes dart angular-dart

AngularDart教程的第3章定义了一个rating @NgComponent(参见下面的摘录),它使用index.html如下:

<rating max-rating="5" rating="ctrl.selectedRecipe.rating"></rating>
Run Code Online (Sandbox Code Playgroud)

在该章中,还建议max-rating @NgAttr可以通过以下方式设置{{...}}:

<rating max-rating="{{ctrl.max}}" rating="ctrl.selectedRecipe.rating"></rating>
Run Code Online (Sandbox Code Playgroud)

RecipeController我简单声明:

 int max = 5;
Run Code Online (Sandbox Code Playgroud)

如果我print("maxRating('$value')")在组件的maxRating()setter主体的顶部添加(见下文),那么在运行应用程序时,我得到以下输出:

maxRating('')  // printed 7 times
maxRating('5') // printed 7 times
Run Code Online (Sandbox Code Playgroud)

问题:为什么价值最初是空的? 我认为这是因为插值还没有完成,但是为什么在值"准备好"之前完全调用了setter?


RatingComponent类定义的摘录:

@NgComponent(
selector: 'rating', ...
publishAs: 'cmp'
)
class RatingComponent {
  ...

  @NgTwoWay('rating')
  int rating;

  @NgAttr('max-rating')
  set maxRating(String value) {
    var count = value == null ? 5 : int.parse(value);
    stars = new List.generate(count, (i) => i+1);
  }
Run Code Online (Sandbox Code Playgroud)

Pat*_*sen 0

据我所知,Angular dart对于价值观的应用是非常渴望的。一旦 Angular 运行,它就会开始应用值,我想是为了提供一种响应能力。我也被这个问题困扰,不得不为尚未初始化的值编写多个解决方法。

绑定机制调用 setter 和 getter 来稳定值,因为某些值可能相互依赖,并且机制通过多次设置和获取值(默认情况下为 7,IIRC)来“强力”实现这一点。