DOM已经包含一个空的SVG标记(svg).当我尝试使用id()动态追加USE现有SVG符号(symbol)的标记时iconId:
svg.empty();
svg[0].setAttribute('viewBox', symbol.getAttribute('viewBox'));
svg.append('<use xlink:href="#' + iconId + '"></use>');
Run Code Online (Sandbox Code Playgroud)
它不再呈现SVG.在Chrome中,如果我添加,则呈现:
element.html(element.html());
Run Code Online (Sandbox Code Playgroud)
或手动操作viewBox属性,但这不是一个真正的解决方案,IE根本不喜欢它.值得一提的是,如果我直接附加SVG图形,则元素呈现.
这里发生了什么,为什么在附加USE标签后没有SVG绘图?
在调查了几天(!?!)以查看当前Angular2应用程序的大量内存泄漏之后,我想出了一个新的发现:
显然,在整个应用程序中大量使用的异步管道正在订阅一个可观察的,但是当组件和管道被清理时,它从未被释放(取消订阅).
它为一个只有少量用户操作的观察者累积了大约11,000个观察者(这最终导致应用程序崩溃).
我需要取消订阅observable,为了做到这一点,我需要一个破坏钩子,类似于ngOnDestroy,但是对于管道.
有没有这样的钩子,或者如果没有,你会如何建议取消订阅?