我一直在调整Angular 2中的反应形式和订阅 . 我不知道为什么某些形式的订阅似乎不被允许 .
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)[]”,消息:“未捕获(在promise中:TypeError:无法设置prope ... ore.umd.js:8486:93)↵在Array.forEach(native)“,originalStack:”错误:未捕获(在promise中):TypeError:不能se ... ps:// unpkg.com/zone.js@0.7.5/dist/zone.js:349:25)“,zoneAwareStack:”错误:未捕获(承诺):TypeError:不能se...g.com/zone.js@0.7 . 5 / dist / zone.js:349:25)[]“,名称:”错误“......}
第一种模式(带有 do
)确实不违法吗?
3 回答
这使你的plunker工作:
完成更改的应用程序
另一种解决方案是使用“ngModelChange”事件
在模板中更改此内容:
在您的组件中处理您的更改事件:
其中一个方法是:
debounceTime 将在给定的毫秒后进行订阅 . 如果不需要,请忽略 .
distinctUntilChanged 将仅强制执行实际值更改 .
我也有这个问题 .
我想在我的情况下做debounceTime,所以它没有解决我的需求 .
我其实忘了订阅!
但我能够通过这种方式获得 Value 变化:
来自Angular文档中的这里:hero-detail-component.ts