【发布时间】:2017-01-16 12:04:26
【问题描述】:
我一直在 Angular 2 中摆弄响应式表单和 valueChanges 订阅。我不太明白为什么某些订阅形式似乎不允许。
this.form.get('name').valueChanges /* <- doesn't work */
.do(changes => {
console.log('name has changed:', changes)
});
.subscribe();
this.form.get('title').valueChanges.subscribe( /* <- does work */
changes => console.log('title has changed:', changes)
);
This plunker 重现问题(打开 DevTools 控制台查看错误):
ZoneAwareError {stack:“错误:未捕获(承诺中):TypeError:无法se...g.com/zone.js@0.7.5/dist/zone.js:349:25)[]”,消息:“未捕获(承诺中):TypeError:无法在 Array.forEach(本机)处设置 prope…ore.umd.js:8486:93)↵”,originalStack:“错误:未捕获(承诺中):TypeError:无法检测…ps: //unpkg.com/zone.js@0.7.5/dist/zone.js:349:25)", zoneAwareStack: "错误:未捕获(承诺中):TypeError:无法查看...g.com/zone.js@ 0.7.5/dist/zone.js:349:25) []",名称:"错误"…}
第一个模式(do)确实不非法吗?
【问题讨论】:
-
为什么
do是非法的?您不需要,您可以将回调传递给subscribe(...)。 Plunker 不为我运行(不知道为什么,有一段时间了,因此无法调查) -
这正是让我困惑的地方:为什么它是非法的? Plunkr 也不总是喜欢我 - 我正在更新我的帖子,但来自 DevTools 的错误。
-
您的 Plunker 确实错过了
do运算符的导入。另见stackoverflow.com/questions/34515173/… -
有点意思,但添加
import 'rxjs/add/operator/do';并没有帮助。 -
很难说,我不知道如何在 Plunker 不工作的情况下进行调试。我没有在我的机器上使用 TypeScript。也许其他人有一个想法。
标签: angular rxjs observable