【发布时间】:2016-05-04 07:29:59
【问题描述】:
我在这里遇到了一个小问题。我正在将一个对象数组与视图绑定,其中包含一些初始值。然后我将一些更多的值推送到该数组,并在推送值后在视图中刷新它。但是当它们刷新时,我需要使用 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 的项目。我使用调试器查找出了什么问题,发现 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);
现在我需要一种更清洁、更好的方法来使此功能正常工作。模型中发生更改时是否会触发任何事件?或者也许我可以访问变化检测器?订阅变更检测器?
感谢任何帮助。 谢谢。
【问题讨论】:
-
尽量不要混合使用 angular 和 jquery