我正在编写一个 Angular 1.5 指令,我遇到了一个令人讨厌的问题,试图在绑定数据存在之前对其进行操作。
这是我的代码:
app.component('formSelector', {
bindings: {
forms: '='
},
controller: function(FormSvc) {
var ctrl = this
this.favorites = []
FormSvc.GetFavorites()
.then(function(results) {
ctrl.favorites = results
for (var i = 0; i < ctrl.favorites.length; i++) {
for (var j = 0; j < ctrl.forms.length; j++) {
if (ctrl.favorites[i].id == ctrl.newForms[j].id) ctrl.forms[j].favorite = true
}
}
})
}
...
如您所见,我正在进行 AJAX 调用以获取收藏夹,然后根据我绑定的表单列表对其进行检查。
问题是,甚至在填充绑定之前就已经实现了承诺……所以当我运行循环时,ctrl.forms 仍然未定义!
如果不使用 \(scope.\)watch(这是 1.5 组件的一部分),我如何等待绑定完成?
原文由 tcmoore 发布,翻译遵循 CC BY-SA 4.0 许可协议
您可以使用 新的生命周期挂钩,特别是
$onChanges
,通过调用isFirstChange
方法来检测绑定的第一次更改。 在此处 阅读更多相关信息。这是一个例子: