我在这里遇到一个小问题。我正在绑定一个带有视图的对象数组,其中包含一些初始值。然后我将更多值推送到该数组,在推送值后,它将在视图中刷新。但是当它们被刷新时,我需要使用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);
现在我需要一种更清洁,更好的方法来使这项功能发挥作用。在模型中发生更改时是否会触发任何事件?或者我可以访问变化探测器?订阅更换探测器?
感谢任何帮助。 感谢。
答案 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。我希望这会对你有所帮助。