我试图找出在不同角度指令上执行清理的最佳方法。
我有不同类型的指令,有些没有定义自己的范围,有些具有独立的范围,有些具有子范围。
我需要一个通用机制来处理我的指令使用的单独组件中的清理。
所以我基本上看了两个不同的选项,要么注册角度element.on('$destroy', function() {...})
,要么注册jquery' scope.$on('$destroy', function () {...})
。
问题在于: 如果我在基础元素破坏上注册,那么我会错过指令的破坏,他们的元素没有被破坏(不确定那可能是怎样的,通过测试注意到它......)。 如果我在基础范围破坏上注册,那么(我认为)我会错过销毁他们的元素被破坏的指令,例如当指令没有定义自己的范围并使用其父范围时。
看看角度指令文档,我发现了这个:
最佳实践:指令应该自行清理。您可以使用element.on(' $ destroy',...)或范围。$ on(' $ destroy',...)来运行清理功能指令被删除。
在我所知道的时候,没有提及使用哪种策略。
另外,看看Angular的文档,我发现了这个:
当不再需要子范围时,子范围创建者有责任通过范围销毁它们。$ destroy()API。
我不理解我应该调用范围的场景。$ destroy()我自己的API。