当指令属性改变时,避免使用$ watch

时间:2015-12-07 11:39:25

标签: angularjs

我有一个指令<resized-image>,其属性为id。根据此ID,它会询问图像对象的API。

此指令用作文章的标题图像。为了了解id,需要首先加载文章的数据。

因此,当文章加载完成后,id的{​​{1}}已设置,并且可以开始加载图片。

我能解决这个问题的唯一方法是在<resized-image>属性的指令中使用$watch

还有另一种更清洁的方法吗?

2 个答案:

答案 0 :(得分:2)

你应该避免使用手表。但是当它们被使用时,一定要使它们尽可能高效和有限。

我建议阅读以下文章,其中包含许多有效的替代策略:https://www.accelebrate.com/blog/effective-strategies-avoiding-watches-angularjs/

他谈到的5个替代方案是:

  1. $ scope Communication
  2. ngModel $ parsers
  3. ngModel $ viewChangeListeners
  4. 的setInterval
  5. 过滤器

答案 1 :(得分:1)

您可以使用ngIf:

<resized-image id=myId ng-if=myId></resized-image>

当myId具有值

时,将编译resizedImage