组件';s视图在Angular2中更新
我正在尝试将Angular2与jQuery+插件结合起来。这基本上是这个问题答案的延伸 我想动态更新所选选择框中显示的项目。Selected已组件';s视图在Angular2中更新,angular,angular2-template,Angular,Angular2 Template,我正在尝试将Angular2与jQuery+插件结合起来。这基本上是这个问题答案的延伸 我想动态更新所选选择框中显示的项目。Selected已Selected:为此更新了事件设计,但我需要在更新组件视图后触发它,因为Selected只查看元素并基于它们生成其内容 您可以看到现场“工作”演示: 这意味着如果我这样做: this.items.push('Another #' + this.items.length); jQuery(this.el.nativeElement).find('selec
Selected:为此更新了事件设计,但我需要在更新组件视图后触发它,因为Selected只查看
元素并基于它们生成其内容
您可以看到现场“工作”演示:
这意味着如果我这样做:
this.items.push('Another #' + this.items.length);
jQuery(this.el.nativeElement).find('select').trigger("chosen:updated");
调用this.items.push()
后,视图未更新,因此它不会执行任何操作
我尝试用setTimeout
包装trigger(“selected:updated”)
来异步调用它,我认为这会有所帮助
this.items.push('Another #' + this.items.length);
setTimeout(() => {
jQuery(this.el.nativeElement).find('select').trigger("chosen:updated");
});
看起来确实有帮助,但我想知道这是正确的方法,还是只是巧合
我原以为在组件的视图更新后可能会调用一些事件,但它们似乎都没有做我需要的事情
编辑:同样的问题在另一个问题中得到了很好的描述:
更新的工作演示:this.items.push(…)
似乎是由运行在Angulars区域之外的代码调用的。Angular在一个区域内运行,并且在该区域内,大多数异步API都经过修补(事件、setTimeout等),以通知Angular必要的更改检测
如果代码在该区域之外运行,Angular不会收到已完成异步执行的通知,也不会发生更改检测。如果在setTimeout(…)内运行代码,则在调用完成时将运行更改检测
有关进行角度运行更改检测的其他方法,请参阅。我认为this.items.push()
在区域内运行,因为它由(单击)
事件调用。我以前尝试过使用NgZone
,但我的用例不同,我需要在检测到更改后调用函数。您链接的答案正是我想要的: