为什么我的 属性 没有在 "Scope" 中更新?

Why isn't my property being updated inside the "Scope"?

我开始冒险进入 Angular2 进行一个业余项目,并且 运行 进入了一些我还不知道如何调试或搜索的东西。

我开始使用 ng2-play 存储库。

我有两个简单的 类(此代码已大大简化 post):

字数-ui.js

export class WordsUI {
  constructor() {
    new Words(data => this.words = data);
  }
}

字数-ui.html

<ol *if="words" reversed>
  <li *for="#entry of words" title="Word for week starting {{entry.date}}">{{entry.word}}</li>
</ol>

字数-data.js

export class Words {
  constructor(cb) {
    firebase
      .child('words')
      .on('value', data => cb(data.val()));
  }
}

唯一还没有正常工作的是 "scope" 识别 属性 words 的值已经更新。这意味着当 UI 加载时,单词列表中不会显示任何内容。如果我然后通过 UI 所有单词添加一个单词到列表,加上添加的单词,显示出来。或者,如果我将 setTimeout 放入 "reload" words 属性 中,它们会显示自己的值。

我想我没有为此使用正确的模式,但我在哪里可以找到更适合这种情况的模式。我有点迷失在新的 ES6 模块系统以及:TypeScript 和 AngularJS 2.

我想我已经提供了代码的相关部分来说明问题,但如果没有请告诉我,我可以努力组合更好的东西。

更新 1:添加了视图文件。未反映 WordsUI 实例的 "context" 上对 words 的更改。

所以我找到了一个答案 - 或者变通,这取决于你的观点 - 在 运行 最初进入它后的几个小时内解决了这种情况。此爱好项目的最终存储库位于 GitHub Weekly Word

问题

我实际上是在尝试从传递给 Word 构造函数的回调中在 WordsUI 实例上设置一个 属性。我认为不知何故没有被拾起,而是 "scope watcher" zones.js(我认为)。

决议

我将读取数据从 Word 实例移到了实例的后续调用中;而不是试图变得棘手并将其保留在传递给构造函数的回调中。

我不认为这种方法——我最终使用的方法——一定是低劣的,前者也不是真正的优越者。

字数-ui.js

export class WordsUI {
  constructor() {
    this words = new Words();
    this.update();
  }

  update() {
    this.words
        .read(words => {
            this.wordList = words;
        })
  }
}

字数-data.js

export class Words {
  constructor() {
    firebase = new Firebase('http://weekly-word.firebase.com').child('words');
  }

  read(cb) {
    firebase
        .on('value', data => {
            cb(data);
        })
  }
}