绑定需要时间来更新View - Angular 2

时间:2016-05-04 07:29:59

标签: jquery binding angular

我在这里遇到一个小问题。我正在绑定一个带有视图的对象数组,其中包含一些初始值。然后我将更多值推送到该数组,在推送值后,它将在视图中刷新。但是当它们被刷新时,我需要使用jQuery隐藏它们并进行其他一些计算。

我的代码 -

Items:Array<Item> = [];

然后我在函数中将值推送到这个数组 -

var allItems = [];
allItems = getData();
allItems.forEach((Item)=>{
    this.Items.push(Item);
});

this.Items.forEach((Item)=>{
    jQuery('#'+Item.id).hide();
    jQuery('#'+Item.id)[0].style.top = this.getTopPosition();
    jQuery('#'+Item.id)[0].style.left = this.getLeftPosition();
});

但遗憾的是,jQuery无法在DOM(View)中找到带有该ID的Item。我使用调试器来查找出错的地方,发现DOM尚未使用Items更新。

要暂时解决此问题,我使用的是setTimeout() -

setTimeout(()=>{
    this.Items.forEach((Item)=>{
        jQuery('#'+Item.id).hide();
        jQuery('#'+Item.id)[0].style.top = this.getTopPosition();
        jQuery('#'+Item.id)[0].style.left = this.getLeftPosition();
    });
},1);

现在我需要一种更清洁,更好的方法来使这项功能发挥作用。在模型中发生更改时是否会触发任何事件?或者我可以访问变化探测器?订阅更换探测器?

感谢任何帮助。 感谢。

2 个答案:

答案 0 :(得分:0)

你无能为力。 setTimeout()是使用jQuery的最佳方法。或者,您可以使用绑定来隐藏项目。

<my-item *ngFor="let item in allItems" [hidden]="isHidden(item.id)" ></my-item>
isHidden(id) {
  return id == this.someHiddenId;
}

答案 1 :(得分:0)

我遇到过类似的问题,想要在ng-repeat完成绑定所有元素后获得通知或调用回调函数。那次我找到了一个解决方案并编写了一个通用指令,以便在每个项目中重用它。我还写了一篇关于此事的小帖子。 Check this link。我希望这会对你有所帮助。