gpt4 book ai didi

angular - 强制 Angular 2 View 从数据更新

转载 作者:太空狗 更新时间:2023-10-29 18:02:34 27 4
gpt4 key购买 nike

我有一个 Angular 2 (beta 0) 组件,它的值会根据 Angular 外部的代码发生变化。我可以监听并在发生此类更改时执行代码,但我不知道要运行什么代码来强制更新 Angular 2 View 。

如果我在组件初始化时获取了对正在运行的 NgZone 的引用,我就可以调用 ngZone.run(function() {/* do nothing */}); 并强制执行更新。但是,我不知道这是否是我应该做的事情,即使是,我也不确定获取对我的应用的 ngZone 的引用的合法方式是什么。

我应该怎么做?

[edit] 在 Angular 1.x 中,我会做 $scope.$apply() 但在 Angular 2 中没有。其他人建议做 setTimeout(function() {/* do stuff */}) 但它似乎没有被 NgZone Hook (它 被普通 Zone Hook ),因此不会触发检查变化。

最佳答案

我想通了。与 Angular 1 不同,并非组件的所有可注入(inject)依赖项都可以从参数名称中推断出来。在我的例子中,我获得了 NgZone 的访问权限,然后像这样在该区域中绑定(bind)更改:

customSelect = ng.core
.Component({
selector: 'custom-select',
templateUrl: 'select.html',
properties:[
'valueProperty:valueProperty',
'value:value',
'options:options'
]
})
.Class({
constructor:[ng.core.NgZone, function(zone) {
this.zone = zone;
}],
ngOnInit:function() {
this.unbindChanges = this.valueProperty.bindChanges(function() {
this.zone.run(function() {
this.value = this.valueProperty.currentValue();
}.bind(this));
}.bind(this));
},
ngOnDestroy:function() {
this.unbindChanges();
}
});

关于angular - 强制 Angular 2 View 从数据更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34324304/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com