我可能过度思考这就是为什么我在这里。 :)
注意:在以下示例中,对象“ctrl”是组件的控制器别名。 var ctrl = this;
假设我们有一个包含两个绑定的组件,其中一个是可选的:
$ curl -X POST -H "Authorization: Bearer XXX" \
"https://www.googleapis.com/upload/storage/v1/b/BUCKET/o/rdf.ads/rewriteTo/b/BUCKET/o/xxx"
{
"error": {
"errors": [
{
"domain": "global",
"reason": "badContent",
"message": "Unsupported content with type: application/octet-stream"
}
],
"code": 400,
"message": "Unsupported content with type: application/octet-stream"
}
}
有时公司是可用的,有时则不然。
$ onChanges看起来像:
bindings: {
params: '<',
company: '<?'
}
似乎当两个绑定都更新时,$ onChanges会运行两次。第一次,ctrl.company(绑定)在组件中为null,即使我确实使用值更新了该绑定。第二次,ctrl.company有它的值。
现在,我知道OR操作可能不正确。我只是不确定$ onChanges如何运作。
如果我对问题的描述不清楚,我会更新。
提前致谢。
答案 0 :(得分:2)
$onChanges(changesObj)
- 每当更新单向(<
)或插值(@
)绑定时调用。该 *changesObj
是一个哈希,其键是已更改的绑定属性的名称,值为a *{ currentValue, previousValue, isFirstChange() }
形式的对象。使用此挂钩来触发a中的更新 *组件,如克隆绑定值,以防止外部值的意外突变。
因此,根据我的观点,您有2个绑定项:params
和company
导致$onChanges
触发两次。
如果你想写一次日志,我会写&&
:
if (changes.params && changes.company) {
console.log('executed');
}